【ExcelVBA】複数Excelファイルデータを1シートにまとめて取り込む方法

9月 20, 2022

ExcelVBAで複数Excelファイルデータを1シートにまとめて取り込みたい人向けに書いています。

本記事の内容

・ExcelVBAで複数Excelファイルデータを1シートにまとめて取り込む方法

ExcelVBA(マクロ)で複数あるExcelファイルデータを1つのシートにまとめたいと思ったことはありませんか?
複数のExcelから1つのExcelファイルにデータをまとめる業務を楽にしたいと思っていませんか?
ExcelVBAで複数Excelファイルデータを1シートにまとめて取り込む方法を紹介します。

ExcelVBAで複数Excelファイルデータを1シートにまとめて取り込む方法

本記事ではFileSystemオブジェクトを使用します。
FileSystemオブジェクトには「Microsoft Scripting Runtime」の参照設定が必要です。
以下が「Microsoft Scripting Runtime」の参照設定方法とプログラムです。

ExcelVBA参照設定

本方法では以下のVBAの参照設定が必要になります。
①メニュータブの「ツール」をクリックし、参照設定をクリックする
参照設定クリック
 
②「Microsoft Scripting Runtime」をチェックする
「Microsoft Scripting Runtime」をチェック
 
③OKボタンをクリックする
OKボタンクリック
 

VBAプログラム

以下がExcelVBAで複数Excelファイルデータを1シートにまとめて取り込むプログラムです。

  1. '*****************************************
  2. '* 複数Excelファイルデータを1シートにまとめる
  3. '*****************************************
  4. Sub EXCEL_FILE_DETA_INPUT()
  5.     Dim i As Long '行カウント
  6.     Dim fso As FileSystemObject 'FileSystemオブジェクト
  7.     Dim targetfolder As Folder 'Folderオブジェクト
  8.     Dim targetfile As File 'Fileオブジェクト
  9.     Dim targetfolderpass As String '取り込み対象フォルダパス
  10.     Dim targetwb As Workbook '取り込みワークブック
  11.     Dim targetws As Worksheet '取り込みワークシート
  12.     Dim targetstartrrow As String '取り込み開始始行
  13.     Dim targetmax As Long '取り込みデータ最終行
  14.     Dim max As Long '出力シート最終行
  15.     Dim outsheet As String '出力シート
  16.     
  17.     '出力シート
  18.     outsheet = "Sheet3"
  19.     
  20.     '取り込み対象フォルダパス
  21.     targetfolderpass = "C:\仮想Dドライブ\ExcelData"
  22.     
  23.     '取り込み開始始行
  24.     targetstartrrow = 2
  25.     
  26.     With ThisWorkbook
  27.         '取り込みシート初期設定
  28.         .Sheets(outsheet).Cells.ClearContents
  29.        
  30.         'FileSystemObjectの設定
  31.         Set fso = New FileSystemObject
  32.         '取込Excel対象フォルダを取得
  33.         Set targetfolder = fso.GetFolder(targetfolderpass)
  34.         
  35.         '対象フォルダ内の全ファイルを処理
  36.         For Each targetfile In targetfolder.Files
  37.             
  38.             '拡張子が「xlsx」のファイルのみを処理
  39.             If fso.GetExtensionName(targetfile) = "xlsx" Then
  40.                
  41.                 'フォルダ内のエクセルを開いてシートを設定
  42.                 Set targetwb = Workbooks.Open(fileName:=targetfile)
  43.                 Set targetws = targetwb.Worksheets(1)
  44.                
  45.                '開いたエクセルの項目取得
  46.                 targetws.Rows(1).Copy .Sheets(outsheet).Range("A" & targetstartrrow - 1)
  47.                
  48.                 '開いたエクセルの最終行を取得
  49.                 targetmax = targetws.Cells(1, 1).End(xlDown).Row
  50.                
  51.                 '開いたエクセルのデータを転記
  52.                 For i = targetstartrrow To targetmax
  53.                    
  54.                     '取り込みシート最終行取得
  55.                     max = .Sheets(outsheet).Range("A1048576").End(xlUp).Row
  56.                     
  57.                     'データ転記
  58.                     targetws.Rows(i).Copy .Sheets(outsheet).Range("A" & max + 1)
  59.                     
  60.                 Next
  61.                 
  62.                 'エクセルを閉じる
  63.                 targetwb.Close
  64.                
  65.                 'オブジェクト解放
  66.                 Set targetws = Nothing
  67.                 Set targetwb = Nothing
  68.             End If
  69.         Next
  70.     End With
  71.      'エクセルを保存
  72.      ThisWorkbook.Save
  73.     
  74.      'オブジェクト解放
  75.      Set targetfolder = Nothing
  76.      Set fso = Nothing
  77.      
  78. End Sub


18行目:出力力シートを設定
21行目:取り込むファイルのあるフォルダパスを設定
24行目:取り込むファイルの取り込み開始行を設定
45行目;取り込みシート番号を指定
 

まとめ

ExcelVBAで複数Excelファイルデータを1シートにまとめて取り込む方法を紹介しました。
複数のExcelファイルを1つのシートにまとめる際に役に立つはずです。
最後までご覧いただき、ありがとうございました。

 

【ExcelVBA】Excelシートを上部から可変的に最終行まで順次処理する方法
【ExcelVBA】CSVデータ取り込み方法(0頭の数字文字列対応)
【ExcelVBA】別Excelファイルのシートデータ取り込み方法(複数ファイル・シート対応)
も紹介していますので、もしよろしければこちらも御覧ください。

 

 

スポンサーリンク