VBAで複数ファイルを選択するダイアログを表示する関数


概要

この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"

コメント

タイトルとURLをコピーしました