📘 Excel逆引き事典

【VBA】特定のフォルダ内の全ファイルを部分一致で転記する方法

日々の業務で大量のファイルから必要な情報を手作業で抽出するのは大変です。この記事では、Excel VBAを使用して特定のフォルダ内の全ファイルを部分一致で一括転記する方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub CopyMatchingFilesData()
    Dim fso As Object, folder As Object, file As Object
    Dim wb As Workbook, ws As Worksheet
    Dim filePath As String, fileName As String, searchPattern As String
    Dim lastRow As Long, i As Long
    
    ' 検索対象のフォルダパスと部分一致するファイル名を指定
    Set fso = CreateObject("Scripting.FileSystemObject")
    searchPattern = "*.txt" ' 部分一致で検索したい拡張子や文字列を設定
    filePath = "C:\test\" ' 検索対象のフォルダパスを指定
    
    Set folder = fso.GetFolder(filePath)
    Set ws = ThisWorkbook.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 ' 最終行の次の行にデータを追加する
    Application.ScreenUpdating = False ' スクリプト実行中に画面更新を停止
    
    For Each file In folder.Files
        If InStr(file.Name, searchPattern) > 0 Then ' 部分一致でファイル名を検索
            fileName = file.Path
            Set wb = Workbooks.Open(fileName)
            With wb.Sheets(1)
                .Range("A1:B5").Copy ws.Cells(lastRow, 1) ' 指定範囲のデータをコピー
                lastRow = lastRow + 5 ' コピーした行数分、次の行に進める
            End With
            wb.Close SaveChanges:=False ' ワークブックは開いただけなので保存せずに閉じる
        End If
    Next file
    Application.ScreenUpdating = True ' スクリプト実行後に画面更新を再開
End Sub

よくある質問

Q 元に戻せますか?

A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。