アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロ初心者です。
どうか教えてください。

●マクロのファイル*A →コピー先
集計リスト_202301.xlsm
sheet1は集計、sheet2から1〜31日までのシートがあります
●Excelファイル*B →コピー元
リスト_202301.xlsx
エリア毎にある月毎にできるファイルです
→リスト202301、リスト202302
シートはその日その日に作成更新され月末になると揃います

ファイルの場所は説明すると…
C:¥user¥te¥desk¥★E
この階層にはエリア毎のデータ集約されるファイルがあります
大阪、東海、北陸、四国、山陽、九州、エリア(作業用)
→→大阪のファイルを開くと
C:¥users¥te¥desk¥★E¥大阪¥USER¥アラーム
ココに
●Excelファイル*B
リスト_202301.xlsx があります。

C:¥user¥te¥desk¥★E¥エリア
ココに
●マクロのファイル*A
集計リスト_202301.xlsm があります。

●困っている作業内容●
『ファイルB』のその日その日にできあがるシートのB8:N9のセルを『ファイルA』の『ファイルB』と同じ日のシートのB8:N9のセルにコピーしたいです。

『Bシート』は毎日のデータなので7日までなら、データ集計前日の01〜06のシートになります。

手作業でマクロ登録して作動させていて、やはりこれでは限界があり困っています。
スムーズなマクロ構文を作成していただけると助かります。できればわかりやすく教えていただけると嬉しいです。
よろしくお願いします。

質問者からの補足コメント

  • つらい・・・

    ご対応くださりありがとうございます。
    構文を登録したのですが、セルの貼り付けができなくて困っています。
    あと、
    大阪だけとしていますが、全エリアを呼び出すにはどのような構文にすればいいでしょうか?

    リストもファイルA(コピー先)は全エリアを対象とするので、以下のようなものです。
    大阪  東海 中国
    B8:D9 E8:H9 I8:N9
    四国 九州
    B22:D23 E22:R23

    このようなリストが シート01〜31まであります。

    ファイルB(コピー元)は上のリストに01、02、03とシートが増えていきます。

    ご教授よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/03/09 09:52

A 回答 (2件)

以下のように処理することができます。



ファイルBの日付を取得する。
ファイルAのシート名と比較して、コピー先のシートを決定する。
ファイルBのシートからB8:N9の範囲をコピーする。
ファイルAのコピー先のシートに貼り付ける。
以下は、上記の処理を行うためのサンプルマクロです。
Sub CopyData()
' ファイルBから日付を取得
Dim wbB As Workbook
Set wbB = Workbooks.Open("C:\user\te\desk\★E\エリア\大阪\USER\アラーム\リスト_202301.xlsx")
Dim dateB As Date
dateB = wbB.Sheets(1).Range("A1").Value
wbB.Close False

' コピー先のシート名を決定
Dim sheetName As String
sheetName = Format(dateB, "dd")
Dim wbA As Workbook
Set wbA = ThisWorkbook
Dim wsA As Worksheet
Set wsA = wbA.Sheets(sheetName)

' ファイルBからB8:N9の範囲をコピーして、貼り付ける
Dim dataB As Variant
Set wbB = Workbooks.Open("C:\user\te\desk\★E\エリア\大阪\USER\アラーム\リスト_202301.xlsx")
dataB = wbB.Sheets(sheetName).Range("B8:N9").Value
wbB.Close False

wsA.Range("B8:N9").Value = dataB
End Sub

このマクロは、ファイルAが開かれた状態で実行する必要があります。また、ファイルBのパスは固定のため、必要に応じて変更する必要があります。
    • good
    • 0

以下は、『ファイルB』の各日付シートからB8:N9のセルを取得して、『ファイルA』の同じ日付のシートのB8:N9のセルに貼り付けるマクロの例です。

以下の手順に従って実行することができます。

マクロを新規作成するために、ExcelファイルAを開きます。
「Alt + F11」キーを押して、VBAエディタを開きます。
VBAエディタ内で、挿入メニューから「モジュール」を選択して、新しいモジュールを作成します。
作成された新しいモジュール内に以下のマクロコードを貼り付けます。

「Alt + Q」キーを押して、VBAエディタを閉じます。
ExcelファイルAを保存します。
ExcelファイルAを開き、[開発]タブを表示し、[マクロ]をクリックします。
表示された[マクロ]ダイアログボックスで、新しく作成した「CopyDataFromBtoA」というマクロを選択します。
[実行]ボタンをクリックすると、マクロが実行されます。

Sub CopyDataFromBtoA()
Dim wbA As Workbook, wbB As Workbook
Dim wsA As Worksheet, wsB As Worksheet
Dim wsBName As String
Dim i As Integer

'ファイルAを開く
Set wbA = ThisWorkbook

'ファイルBを開く
Set wbB = Workbooks.Open("C:\user\te\desk\★E\エリア\大阪\USER\アラーム\リスト_202301.xlsx")

'ファイルBの日付シートをループ
For i = 1 To 7 ' 1から7までの日付を処理する
wsBName = Format(i, "00") ' シート名を「01」「02」などの2桁の日付にする
Set wsB = wbB.Sheets(wsBName)
Set wsA = wbA.Sheets(wsBName)

' B8:N9のセルの値をコピーする
wsA.Range("B8:N9").Value = wsB.Range("B8:N9").Value
Next i

' ファイルBを閉じる
wbB.Close SaveChanges:=False
End Sub

このマクロを実行することで、『ファイルB』の各日付シートからB8:N9のセルを取得して、『ファイルA』の同じ日付のシートのB8:N9のセルに貼り付けることができます。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!