shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】選択した複数ファイルを処理する事例

ExcelのVBAで、選択した複数ファイルを処理するサンプルです。

Application.FileDialog(msoFileDialogFilePicker)を利用する方法で、OneDriveと同期したフォルダでも利用可能でした。

内容:

動作確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2501)です。

Excelファイルが対象の場合の事例

VBAのサンプルは次のとおりです。

ファイル選択画面を表示し、選択したExcelファイルを一つずつ開く、メッセージの表示、閉じるを繰り返すだけです。

他の用途で活用時には「メッセージの表示」を必要な処理内容に修正します。

Option Explicit
Sub 選択した複数ファイルを処理する()
    Dim 対象ファイル As Object
    Dim ファイルパス As Variant
   
    
    ' 対象ファイルの選択(複数)'
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "対象ファイルを選択してください"
        .InitialFileName = ThisWorkbook.Path & "\"
        .Filters.Add "Excel Files", "*.xlsx", 1
        If .Show <> -1 Then Exit Sub

        ' 選択した各ファイルの処理'
        For Each ファイルパス In .SelectedItems
            ' ファイルを開く'
            Set 対象ファイル = Workbooks.Open(ファイルパス)

            ' メッセージの表示'
            MsgBox 対象ファイル.Name & " を起動しました"

            ' ファイルを閉じる(保存なし)'
            対象ファイル.Close SaveChanges:=False
        Next
    End With
End Sub
補足説明
  • 上記コードで、対象ファイルの選択部分にある
    AllowMultiSelect = True
    で複数ファイル選択を許可しています。Falseの場合は単一選択です。

Wordファイルが対象の場合の事例

【Excel VBA】指定フォルダ内のWord文書を置換リストで一括置換するサンプルでの事例をもとに、「複数選択したWord文書を置換リストで一括置換」した具体例です。

Option Explicit
Dim 置換リスト As Variant
Dim wrdApp As Object
Dim wrdDoc As Object

Sub 複数選択したWord文書を置換リストで一括置換()
    
    Dim 最終行 As Long
    Dim ファイルパス As String

'置換リスト (文章)を2次元配列に変換’
    With ThisWorkbook.Sheets("置換リスト (文章)")
        最終行 = .Cells(Rows.Count, 1).End(xlUp).Row
        置換リスト = .Range(.Cells(1, 1), .Cells(最終行, 2)).Value
    End With
    
' 対象ファイルの選択(複数)'
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "置換対象ファイルを選択してください"
        .InitialFileName = ThisWorkbook.Path & "\"
        .Filters.Add "Word Files", "*.docx", 1
        If .Show <> -1 Then Exit Sub
        
        ' 選択した各ファイルの処理'
        For Each ファイルパス In .SelectedItems
            Call 都度確認しながら置換リストでWord文書の文字列を置換(CStr(ファイルパス))
        Next
    End With

End Sub

上記コードで呼び出ししている「都度確認しながら置換リストでWord文書の文字列を置換」の部分は事例の元になっている以下と同じです。

shikumika.org

OneDriveやSharePointにあるファイル操作時の注意点

VBAで、OneDriveやSharePointのファイルを開く、保存をする場合は、少し注意が必要です。詳細は次のとおりです。

shikumika.org

以上、Excel VBAを利用し、選択した複数ファイルを処理するサンプルでした。