【Excel VBA】FileDialogで複数ファイルを選択してパスを取得する方法

みなさんこんにちは。

Excel VBAで処理対象のファイルをユーザーに選択してもらう場合、FileDialogを使うとエクスプローラーのような画面からファイルを選択できます。

複数のExcelファイルやCSVファイルをまとめて選び、そのパスを順番に取得したいこともあるかと思います。

今回は、FileDialogのFilePickerとAllowMultiSelectを使って複数ファイルを選択し、SelectedItemsからパスを取得する方法をご紹介したいと思います。

この記事はこんな人におすすめ

  • VBAで複数ファイルをまとめて選択したい人
  • AllowMultiSelectやSelectedItemsの使い方を知りたい人
  • 選択したファイルのパスを順番に処理したい人

FileDialogでファイル選択画面を開く

ファイルを選択する場合は、Application.FileDialogにmsoFileDialogFilePickerを指定します。

Dim fd As FileDialog

'========================================
' ファイル選択用のFileDialogを取得する
'========================================
Set fd = Application.FileDialog( _
    msoFileDialogFilePicker _
)

AllowMultiSelectで複数選択を有効にする

'========================================
' 複数ファイルの選択を許可する
'========================================
fd.AllowMultiSelect = True

'========================================
' ダイアログのタイトルを設定する
'========================================
fd.Title = "処理するファイルを選択してください" 
AllowMultiSelect = Trueにすると、CtrlキーやShiftキーを使って複数のファイルを選択できま
Excel VBAのFileDialogで複数のファイルを選択している画面

SelectedItemsから選択したファイルを取得する

「開く」を押したあと、選択したファイルはSelectedItemsから取得できます。

Dim selectedPath As Variant

'========================================
' ファイル選択画面を表示する
'========================================
If fd.Show = -1 Then

    '========================================
    ' 選択したファイルを順番に取得する
    '========================================
    For Each selectedPath In fd.SelectedItems

        Debug.Print selectedPath

    Next selectedPath

End If

SelectedItemsには選択したファイルのフルパスが格納されるため、For Eachで1件ずつ処理できます。

選択したファイルパスをExcelへ出力する

ワークシートへ一覧で出力する場合は、行番号を用意して順番に書き込みます。

Dim fd As FileDialog
Dim selectedPath As Variant
Dim outputRow As Long

'========================================
' 初期設定
'========================================
Set fd = Application.FileDialog( _
    msoFileDialogFilePicker _
)

fd.AllowMultiSelect = True
fd.Title = "処理するファイルを選択してください"

outputRow = 2

'========================================
' ファイル選択画面を表示する
'========================================
If fd.Show = -1 Then

    '========================================
    ' 選択したファイルを順番に出力する
    '========================================
    For Each selectedPath In fd.SelectedItems

        Cells(outputRow, 1).Value = selectedPath
        outputRow = outputRow + 1

    Next selectedPath

End If

'========================================
' オブジェクトを解放する
'========================================
Set fd = Nothing

これで、選択したファイルのフルパスがA2セルから下方向へ順番に出力されます。

Excel VBAのFileDialogで選択した複数ファイルのフルパスをExcelへ出力した画面

キャンセルされた場合の動作

fd.Showは「開く」が押された場合に-1を返します。If fd.Show = -1 Thenで囲んでおけば、キャンセル時はSelectedItemsの処理を実行しません。

フォルダを選択したい場合

フォルダのパスを取得したい場合は、以前の記事

も参考にしてください。

最後に

いかがでしたでしょうか。

今回は、Excel VBAのFileDialogで複数ファイルを選択し、SelectedItemsからファイルパスを取得する方法をご紹介しました。

AllowMultiSelect = TrueとFor Eachを組み合わせれば、複数ファイルをまとめて選択し、その後の処理へ順番に渡すことができます。

CSVの一括処理などにも利用できますので、少しでも参考になれば幸いです。

開発依頼について

ココナラでWebスクレイピング開発サービスを出品しております。

自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。

そんな方はいつでもお気軽にご相談ください。

また、本ブログからご依頼いただいた方については割引特典がございますので、

ご不明点と合わせてメッセージをいただけると幸いです。

業務の流れをまるごと自動化します Excel・Web・Teams・SaaSで業務全体を自動化

Webスクレイピング以外にもWebアプリの開発サービスも出品しております。

こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、

お気軽にご相談ください。

スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?

ご興味がある方はこちら!!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA