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文書の文字列を置換」の部分は事例の元になっている以下と同じです。
OneDriveやSharePointにあるファイル操作時の注意点
VBAで、OneDriveやSharePointのファイルを開く、保存をする場合は、少し注意が必要です。詳細は次のとおりです。
以上、Excel VBAを利用し、選択した複数ファイルを処理するサンプルでした。