【Excel VBA】FileDialogでフォルダを選択してパスを取得する方法
みなさんこんにちは。
Excel VBAでファイル保存先や読み込み先を指定するとき、コードへフォルダパスを直接書いている方も多いかと思います。
ただし、利用者によって保存場所が違う場合や、毎回対象フォルダを変更したい場合は、固定パスでは使いにくくなります。
このような場合は、FileDialogを使って利用者自身にフォルダを選択してもらう方法が便利です。
今回は、FileDialogでフォルダ選択画面を表示し、選択したフォルダのパスを取得する方法をご紹介したいと思います。
この記事はこんな人におすすめ
- VBAでフォルダ選択画面を表示したい人
- 固定パスを書かずに処理したい人
- 選択したフォルダのパスを取得したい人
FileDialogとは
FileDialogは、Excelからファイルやフォルダの選択画面を表示するための機能です。
フォルダを選択する場合は、msoFileDialogFolderPickerを指定します。
フォルダ選択画面を表示する
まずは、フォルダを選択する基本的なコードを確認します。
Sub SelectFolder()
Dim folderPath As String
'========================================
' フォルダ選択ダイアログを表示する
'========================================
With Application.FileDialog(msoFileDialogFolderPicker)
'ダイアログのタイトルを設定する
.Title = "フォルダを選択してください"
'====================================
' フォルダが選択された場合
'====================================
If .Show = -1 Then
'選択したフォルダのパスを取得する
folderPath = .SelectedItems(1)
'取得したパスを表示する
MsgBox folderPath
End If
End With
End Sub
マクロを実行するとフォルダ選択画面が表示され、選択したフォルダのパスを取得できます。

Showで選択されたか確認する
.Showは、ダイアログで「OK」が押された場合に-1を返します。
そのため、次のように条件分岐することで、利用者がフォルダを選択した場合だけ処理できます。
If .Show = -1 Then
'フォルダが選択された場合の処理
End If
SelectedItemsでパスを取得する
選択されたフォルダは、SelectedItems(1)で取得できます。
folderPath = .SelectedItems(1)
取得した値は、ファイルの保存先や読み込み先として利用できます。
キャンセルされた場合も処理する
利用者がフォルダを選ばずにキャンセルする場合もあるため、キャンセル時の処理も入れておくと安心です。
Sub SelectFolderWithCancel()
Dim folderPath As String
'========================================
' フォルダ選択ダイアログを表示する
'========================================
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
If .Show = -1 Then
'================================
' 選択したフォルダのパスを取得
'================================
folderPath = .SelectedItems(1)
MsgBox "選択したフォルダ:" & vbCrLf & _
folderPath
Else
'================================
' キャンセルされた場合
'================================
MsgBox "フォルダ選択をキャンセルしました。"
Exit Sub
End If
End With
End Sub

最後に
いかがでしたでしょうか。
今回は、Excel VBAのFileDialogを使ってフォルダを選択し、選択したパスを取得する方法をご紹介しました。
固定パスをコードへ直接書かず、利用者に選択してもらうことで、環境が変わっても使いやすい処理にできます。
フォルダ選択を使ったマクロを作成するときに、少しでも参考になれば幸いです。
開発依頼について
ココナラでWebスクレイピング開発サービスを出品しております。
自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。
そんな方はいつでもお気軽にご相談ください。
また、本ブログからご依頼いただいた方については割引特典がございますので、
ご不明点と合わせてメッセージをいただけると幸いです。
Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!Webスクレイピング以外にもWebアプリの開発サービスも出品しております。
こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、
お気軽にご相談ください。
スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?
