VBAで自動化 VBA一覧 ファイル・印刷操作 ファイル操作

【VBA】ExcelVBAでワイルドカードを使ってファイルを自動で開く方法

ExcelVBAを使ってフォルダ内の複数ファイルを処理する際、「ファイル名が毎回異なるけれど、特定のパターンには一致する」というケースは非常に多く見られます。こうした状況では、VBAにおけるワイルドカード(*や?)の活用が不可欠です。本記事では、ExcelVBAで「ワイルドカードを使ってファイルを開く方法」について、実用的なコード例とともに詳しく解説します。

✅ ExcelVBAで使えるワイルドカードとは?

まず、VBAでのワイルドカード指定について理解しておきましょう。ワイルドカードとは、特定のパターンに一致する文字列を柔軟に指定できる記号のことです。VBAでは、以下の2種類の記号が代表的です。

  • *(アスタリスク):任意の文字列に一致(例:"data*.xlsx" → "data1.xlsx", "data_2024.xlsx"など)
  • ?(クエスチョン):任意の1文字に一致(例:"data?.xlsx" → "data1.xlsx", "dataA.xlsx"など)

これらを利用することで、「ファイル名の一部しか分からないけれど対象ファイルを開きたい」というニーズに対応可能です。

✅ VBAでワイルドカードを使ってファイルを開く基本構文

VBAでファイルを開くには、通常は Workbooks.Open メソッドを使用します。しかし、Workbooks.Open では直接ワイルドカードを指定できないため、ファイル名の検索にはDir関数を併用します。

以下に、ワイルドカードでファイルを検索して開く基本的な構文を紹介します。【Excel】CSVファイルをExcelで開く設定方法|正しく開いて文字化けやデータ崩れを防ぐ

Sub OpenFileWithWildcard()

    Dim folderPath As String
    Dim fileName As String
    Dim fullPath As String

    ' 対象フォルダのパスを指定(最後に「\」を忘れずに)
    folderPath = "C:\Users\YourName\Documents\Reports\"

    ' ワイルドカードを含めたファイル名パターンを指定
    fileName = Dir(folderPath & "report_*.xlsx")

    ' ファイルが見つかったか確認
    If fileName <> "" Then
        fullPath = folderPath & fileName
        Workbooks.Open fullPath
        MsgBox "ファイルを開きました:" & fileName
    Else
        MsgBox "該当するファイルが見つかりませんでした。"
    End If

End Sub

コード解説

  • Dir関数で、指定フォルダ内に存在する「report_」で始まるExcelファイルを検索します。
  • 該当ファイルが存在すれば、そのパスをWorkbooks.Openで開きます。

✅ 複数ファイルをワイルドカードで一括処理する方法

ワイルドカードで一致するすべてのファイルを処理したい場合は、Dir関数をループで使います。

Sub OpenAllMatchingFiles()

    Dim folderPath As String
    Dim fileName As String
    Dim fullPath As String

    folderPath = "C:\Users\YourName\Documents\Reports\"
    fileName = Dir(folderPath & "report_*.xlsx")

    Do While fileName <> ""
        fullPath = folderPath & fileName
        Workbooks.Open fullPath
        MsgBox "ファイルを開きました:" & fileName

        ' 次のファイルを取得
        fileName = Dir
    Loop

End Sub

この処理では、「report_」で始まるすべてのファイルを順番に開いて処理できます。

✅ ファイルを開くだけでなくデータをコピー

ファイルを開いたあと、特定のシートからデータをコピーして、マスターブックに貼り付ける処理にも活用できます。

Sub ImportDataFromMatchingFiles()

    Dim folderPath As String
    Dim fileName As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim masterWS As Worksheet
    Dim lastRow As Long

    folderPath = "C:\Users\YourName\Documents\Reports\"
    fileName = Dir(folderPath & "report_*.xlsx")

    Set masterWS = ThisWorkbook.Sheets("集計")

    Do While fileName <> ""

        Set wb = Workbooks.Open(folderPath & fileName)
        Set ws = wb.Sheets(1)

        lastRow = masterWS.Cells(Rows.Count, 1).End(xlUp).Row + 1
        ws.Range("A1:D10").Copy masterWS.Cells(lastRow, 1)

        wb.Close SaveChanges:=False
        fileName = Dir

    Loop

    MsgBox "すべてのデータを集計シートに取り込みました。"

End Sub

このマクロでは、フォルダ内の「report_」で始まるすべてのファイルを開き、シート1のA1:D10のデータを集計シートに順次貼り付けています。

■よくあるエラーと対処法

エラー1:Dirがファイルを見つけられない

原因:パスの最後に「\」が抜けている、またはワイルドカードの記述ミス。

対処folderPath = "C:\Users\YourName\Documents\"のように末尾のスラッシュを忘れないこと。また、ファイル名のパターン(例:"*.xlsx")も正確に記述する必要があります。

【VBA】オブジェクトの存在を確認する方法


エラー2:ファイルが開かない or 空のファイルが対象になる

原因:アクセス権限、ファイルがすでに開かれている、一時ファイル(例:~$〇〇.xlsx)が対象になっている可能性。

対処:一時ファイルをスキップする条件を加えることで改善可能です。

If Left(fileName, 2) <> "~$" Then
    ' ファイルを開く処理
End If

■ワイルドカードの使いどころと注意点

活用シーン

  • 日付や時刻付きのファイル名(例:"sales_202406.xlsx")を毎月処理したい
  • 担当者ごとに分かれたファイル(例:"担当A_report.xlsx")を一括処理したい
  • 特定のファイル形式(例:"*.csv")をまとめて読み込みたい

【VBA】ワイルドカードの使用方法

注意点

  • Dir関数は状態を保持するため、他のファイル処理と混在すると正常動作しない場合があります。必要であれば都度変数をリセットしてください。
  • ワイルドカードを使って一致した最初のファイルのみを対象に処理したい場合は、ループではなく1回だけDirを使います。

■まとめ

ExcelVBAにおける「ファイルを開く ワイルドカード」の活用は、業務効率化に欠かせないテクニックです。Dir関数と組み合わせることで、特定の名前パターンに一致するファイルを自動で開いたり、まとめて処理したりすることが可能になります。日々の定型業務や定期的なレポート処理など、さまざまな業務に応用できるため、ぜひ活用してみてください。

今後、さらに柔軟なファイル管理を目指すなら、日付やファイルサイズの条件指定などを追加した高度なフィルタリングも視野に入れてみましょう。

-VBAで自動化, VBA一覧, ファイル・印刷操作, ファイル操作