ExcelVBA ワイルドカードで特定条件に一致するファイルを検索する方法

 

ExcelVBA  ワイルドカード (`*`, `?`) を使うことで、特定の条件に一致するファイルを簡単に検索し、処理できます。 手作業でファイル名を確認せずに、一括処理が可能になります。 使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

「VBAスキルを証明できれば、社内評価アップにつながるかもしれません
👉 VBAを学んで社内評価を上げる方法はこちら

 

 

Excel VBA ワイルドカードで特定条件に一致するファイルを検索|流れ

1.特定のパターンに一致するExcelファイルを開く

2.フォルダ内の複数ファイルを検索・処理

3.日付や特定の文字が含まれるファイルを操作

4.ファイル一覧を取得してリストにする

 

Excel VBA ワイルドカードで特定条件に一致するファイルを検索|使い方

記号 説明
* データ*.xlsx 「データ」で始まり、「.xlsx」で終わる」すべてのファイル
? データ?.xlsx データ」の後に1文字がついたファイル (`データ1.xlsx`, データA.xlsx など)

Excel VBA ワイルドカードで特定条件に一致するファイルを検索サンプルコード

「VBAスキルを証明できれば、社内評価アップにつながるかもしれません
👉 VBAを学んで社内評価を上げる方法はこちら

 

フォルダ内のすべての Excel ファイルを開く

標準モジュール

Option Explicit

Sub ワイルドカードでExcelファイルを開く()
    Dim ファイル名 As String
    Dim フォルダパス As String
    
    ' 検索するフォルダを指定
    フォルダパス = "C:\Users\User\Desktop\データ\"
    
    ' ワイルドカードを使用してファイルを検索
    ファイル名 = Dir(フォルダパス & "*.xlsx")
    
    ' ファイルが見つかる限りループ
    Do While ファイル名 <> ""
        Workbooks.Open フォルダパス & ファイル名
        ファイル名 = Dir() ' 次のファイルを取得
    Loop
End Sub
ポイント

・Dir(フォルダパス & "*.xlsx") で 特定の拡張子のファイルを検索

・Do While ファイル名 <> "" で 全ファイルを開く

・Dir() を繰り返し呼び出すことで 次のファイルを取得

フォルダ内の「データ」で始まるファイルをリスト化

標準モジュール

Option Explicit

Sub 指定した名前のファイルをリスト化()
    Dim ws As Worksheet
    Dim ファイル名 As String
    Dim フォルダパス As String
    Dim i As Integer
    
    ' シートを指定(結果を出力する場所)
    Set ws = ThisWorkbook.Sheets(1)
    
    ' 検索するフォルダ
    フォルダパス = "C:\Users\User\Desktop\データ\"
    
    ' ワイルドカードでファイル名を検索
    ファイル名 = Dir(フォルダパス & "*.xlsx")
    
    ' 行番号を初期化
    i = 1
    
    ' すべての一致するファイルをリストに追加
    Do While ファイル名 <> ""
        ws.Cells(i, 1).Value = ファイル名
        i = i + 1
        ファイル名 = Dir()
    Loop
End Sub
ポイント

・ Sheets(1) の A列に一致するファイルをリスト表示

・ データ*.xlsx を指定することで 「データ」で始まるファイルのみ取得

・ i = i + 1 で 次の行に書き込む

最新の日付のファイルを開く

標準モジュール

Option Explicit

Sub 最新ファイルを開く()
    Dim ファイル名 As String
    Dim フォルダパス As String
    Dim 最新ファイル As String
    Dim 最新日付 As Date
    
    ' フォルダパスを指定
    フォルダパス = "C:\Users\User\Desktop\データ\"
    
    ' 初期化
    最新日付 = #1/1/1900# ' 過去の日付を初期値に設定
    最新ファイル = ""
    
    ' ワイルドカードを使ってファイル検索
    ファイル名 = Dir(フォルダパス & "*.xlsx")
    
    ' すべてのファイルをチェック
    Do While ファイル名 <> ""
        ' 更新日時を取得
        If FileDateTime(フォルダパス & ファイル名) > 最新日付 Then
            最新日付 = FileDateTime(フォルダパス & ファイル名)
            最新ファイル = ファイル名
        End If
        ファイル名 = Dir()
    Loop
    
    ' 最新ファイルを開く
    If 最新ファイル <> "" Then
        Workbooks.Open フォルダパス & 最新ファイル
        MsgBox "最新のファイル: " & 最新ファイル
    Else
        MsgBox "該当するファイルがありません。"
    End If
End Sub
ポイント

・FileDateTime(フォルダパス & ファイル名) で ファイルの更新日時を取得

・最も新しいファイルのみ開く

 

Excel VBA ワイルドカードで特定条件に一致するファイルを検索|注意点

1. ワイルドカードは Dir()` でのみ使用可能
Workbooks.Open "C:\データ\*.xlsx" 
→ Dir() を使ってファイルを取得し、 Workbooks.Open に渡す

2. ファイルが見つからない場合の処理
・ Dir() が `""` を返した場合は ファイルが存在しない
・ If ファイル名 = "" Then MsgBox "ファイルがありません" でエラーハンドリング

3. フォルダの指定ミス
・フォルダパス の 最後に必ず `\` をつける
・フォルダパス & "*.xlsx" のように結合する

 

Excel VBA ワイルドカードで特定条件に一致するファイルを検索|まとめ

方法 コード例 特徴
特定の拡張子のファイルを開く Dir(フォルダ & "*.xlsx") フォルダ内の全Excelファイルを開く
ファイルをリスト化 Dir(フォルダ & "データ*.xlsx") 特定の名前で始まるファイルをリスト化
最新のファイルを開く FileDateTime(ファイル) 最終更新日が最新のファイルを開く
特定の日付のファイルを開く Dir(フォルダ & "データ_YYYY・MM・DD.xlsx") 日付入りファイルを開く

ワイルドカードを活用し、効率的にファイルを処理しましょう。

 

「VBAスキルを証明できれば、社内評価アップにつながるかもしれません