フォルダ内にあるエクセルファイルのデータを転記する方法です。初級者向けの内容です。
配列による方法:別ブック(複数)のデータを別ブックのシートにまとめる・配列
Power Queryを使う方法もあります。
ここで記載しているコードは、自分のおぼえがきです。もし参考にする場合は、これ以外にも方法はありますので、ご自身でアレンジしてみてください。
エクセルのバージョン:Office Home & Business 2019
目次
やりたいこと・転記元のデータと転記先データ
転記元のデータは3つ
- 購入品_1月.xlsx
- 購入品_2月.xlsx
- 購入品_3月.xlsx
シートは全て「購入品」のみです。
この3つのデータを転記するデータ
シートは全て「購入品」
転機後
エクセルVBA
- データの選択は、ダイアログボックスを表示する方法
- 転記元のデータのコピーは書式も含めてます
- D列にファイル名を入力する
Sub f_tenki() Dim fPath As String Dim motoFile As String Dim sakiSheet As Worksheet Dim sakiLRow, motoLRow, sakiLRow2 As Long With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then fPath = .SelectedItems(1) End If End With If fPath = "" Then End With Application .ScreenUpdating = False .DisplayAlerts = False End With Set sakiSheet = ActiveWorkbook.Sheets("購入品") fPath = fPath & "¥" motoFile = Dir(fPath & "*.xlsx") Do While motoFile <> "" sakiLRow = sakiSheet.Cells(Rows.Count, 1).End(xlUp).Row Workbooks.Open Filename:=fPath & motoFile, UpdateLinks:=True, ReadOnly:=True motoLRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A2:C" & motoLRow).Copy sakiSheet.Range("A" & sakiLRow + 1) sakiLRow2 = sakiSheet.Cells(Rows.Count, 1).End(xlUp).Row sakiSheet.Range("D" & sakiLRow + 1 & ":D" & sakiLRow2) = motoFile Workbooks(motoFile).Close motoFile = Dir() Loop Range("A1").Select With Application .ScreenUpdating = True .DisplayAlerts = True End With End Sub