VBA

VBA – フォルダ選択ダイアログを使ってExcelファイルを一括処理する方法

Excel VBAを使って効率的なデータ処理を行う上で、フォルダ内の複数のExcelファイルを一括で処理する必要があります。この記事では、VBAを使用してフォルダ選択ダイアログを表示し、選択されたフォルダ内のExcelファイルを順に処理する方法に焦点を当てます。

実装

Sub Sample()
    Dim Fld As String
    Dim Fname As String
    Dim Wb As Workbook
    
    ' フォルダ選択ダイアログを表示
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show Then
            Fld = .SelectedItems(1) & "\"
        Else
            ' キャンセル時の処理
            ' Debug.Print "キャンセルしました。"
            Exit Sub
        End If
    End With
    
    ' フォルダ内のExcelファイルを順に処理
    Fname = Dir(Fld & "*.xlsx")
    Do Until Fname = ""
        ' Debug.Print Fld & Fname
        
        ' Excelファイルを開く
        Set Wb = Workbooks.Open(Fld & Fname)
        
        ' Wbに対する処理
        
        ' Excelファイルを閉じる
        Wb.Close
        Fname = Dir()
    Loop
End Sub

解説

Sub Sample()
    ' ... 省略 ...
End Sub

このサブルーチンはメインの実行部分です。

With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show Then
        Fld = .SelectedItems(1) & "\"
    Else
        ' キャンセル時の処理
        ' Debug.Print "キャンセルしました。"
        Exit Sub
    End If
End With

Application.FileDialog オブジェクトを使用して、フォルダ選択ダイアログを表示しています。ユーザーがフォルダを選択した場合、そのパスを Fld 変数に格納します。キャンセルされた場合はサブルーチンを終了します。

Fname = Dir(Fld & "*.xlsx")
Do Until Fname = ""
    ' Debug.Print Fld & Fname
    
    ' Excelファイルを開く
    Set Wb = Workbooks.Open(Fld & Fname)
    
    ' Wbに対する処理
    
    ' Excelファイルを閉じる
    Wb.Close
    Fname = Dir()
Loop

Dir 関数を使用して、指定されたフォルダ内の .xlsx ファイルの一覧を取得します。取得したファイル名を使用して、Workbooks.Open メソッドでExcelファイルを開き、Wb 変数に代入します。その後、Wb に対して行いたい処理を記述し、最後に Wb.Close でExcelファイルを閉じます。これを繰り返すことで、フォルダ内の全てのExcelファイルに対して同じ処理を行います。

まとめ

このVBAコードを利用することで、Excel VBAを使用してフォルダ内のExcelファイルを一括で処理する手法が理解できます。この手法を応用すれば、データの一括処理や集計など、様々な業務に効果的に活用できます。