概要
このVBA関数は、ユーザーが複数のファイルを選択できるファイルダイアログを表示し、選択されたファイルのパスを配列で返します。たとえば、複数のExcelファイルや画像ファイルを一括で読み込む処理に応用できます。
関数コード
Function SelectMultipleFiles() As Variant
Dim fd As FileDialog
Dim selectedFiles As Collection
Dim filePaths() As String
Dim i As Integer
' ファイル選択ダイアログの作成
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "ファイルを選択してください"
.AllowMultiSelect = True ' 複数選択を許可
.Filters.Clear
.Filters.Add "すべてのファイル", "*.*"
' ユーザーが「開く」をクリックした場合
If .Show = -1 Then
Set selectedFiles = New Collection
For i = 1 To .SelectedItems.Count
selectedFiles.Add .SelectedItems(i)
Next i
' コレクションから配列に変換
ReDim filePaths(1 To selectedFiles.Count)
For i = 1 To selectedFiles.Count
filePaths(i) = selectedFiles(i)
Next i
SelectMultipleFiles = filePaths
Else
' キャンセル時は空の配列を返す
SelectMultipleFiles = Array()
End If
End With
Set fd = Nothing
End Function
使用例
以下のサンプルマクロでは、上記関数を使ってファイルを選択し、選択されたファイルのパスをイミディエイトウィンドウに出力します。
Sub TestSelectMultipleFiles()
Dim files As Variant
Dim i As Integer
files = SelectMultipleFiles()
If IsArray(files) Then
For i = LBound(files) To UBound(files)
Debug.Print files(i)
Next i
Else
MsgBox "ファイルは選択されませんでした。"
End If
End Sub
補足
.AllowMultiSelect = True
を設定することで複数選択が可能になります。.Filters.Add
を変更することで、特定のファイル形式(例:Excelファイル)だけを対象にできます。
.Filters.Add "Excelファイル", "*.xlsx; *.xls"
コメント