VBAでフォルダを選ぶ画面を表示するには、Application.FileDialog(msoFileDialogFolderPicker) を使います。これを使うと、マクロを実行するたびにフォルダを自分で選べるようになるので、コードをその都度書き換える必要がなくなります。
この記事では、次の内容を順番に解説します。
- フォルダ選択ダイアログを表示する基本のコード
- コードの各部分の意味
- キャンセルされたときの対処
- 選んだフォルダの中のファイルを一覧に表示する応用
フォルダを選ぶ画面を表示するには?
次のコードを実行すると、Windowsのフォルダ選択画面が表示され、選んだフォルダのパスを取得できます。
Sub SelectFolderExample()
Dim folderPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
.AllowMultiSelect = False
If .Show = -1 Then
folderPath = .SelectedItems(1)
MsgBox "選択されたフォルダ:" & folderPath
Else
MsgBox "キャンセルされました。"
End If
End With
End Sub
コードの各部分の意味
Application.FileDialog(msoFileDialogFolderPicker):フォルダを選ぶ画面を呼び出します。.Title:ダイアログの上部に表示されるタイトル文字を設定します。.AllowMultiSelect = False:フォルダを1つだけ選べるようにします。.Show = -1:「OK」ボタンが押されたかどうかを確認しています。押されたら-1、キャンセルされたら0になります。.SelectedItems(1):選ばれたフォルダのパスを取り出します。
キャンセルされたときはどう対処する?
フォルダを選ばずにキャンセルした場合、.Show の値が 0 になります。そのまま処理を続けるとエラーになるので、必ず If .Show = -1 Then で「OKが押されたかどうか」を確認してから処理を進めましょう。
キャンセルされた場合は「キャンセルされました」と表示して処理を止めるのが良いです。
選んだフォルダのファイルを一覧に表示するには?
フォルダを選んだあと、そのフォルダの中にあるファイル名をシートに書き出す応用コードです。
Sub ListFilesInSelectedFolder()
Dim folderPath As String
Dim fileName As String
Dim i As Long
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
.AllowMultiSelect = False
If .Show = -1 Then
folderPath = .SelectedItems(1)
' パスの末尾に¥がなければ追加する
If Right(folderPath, 1) <> "¥" Then
folderPath = folderPath & "¥"
End If
' フォルダ内のファイルを1つずつ取得する
fileName = Dir(folderPath & "*.*")
i = 1
Do While fileName <> ""
Cells(i, 1).Value = fileName
i = i + 1
fileName = Dir()
Loop
MsgBox "一覧の出力が完了しました。"
Else
MsgBox "キャンセルされました。"
End If
End With
End Sub
コードの流れ
- フォルダを選ぶ画面を表示して、選んだフォルダのパスを取得します。
- パスの末尾に
¥がなければ自動で追加します(ファイル名とつなげるために必要)。 Dirでフォルダの中のファイルを1つずつ取り出して、A列に書き込んでいきます。- ファイルがなくなったら完了のメッセージを表示します。
まとめ
フォルダ選択ダイアログを使うと、マクロを使う人が自分でフォルダを選べるようになります。コードにパスを直接書かなくて済むので、他の人にも使ってもらいやすいマクロになります。
- フォルダを選ぶ画面を表示:
Application.FileDialog(msoFileDialogFolderPicker)を使う。 - OKかキャンセルかを確認:
If .Show = -1 Thenで判断する。 - 選んだフォルダのパスを取得:
.SelectedItems(1)で取り出す。 - フォルダ内のファイルを一覧化:
Dirと組み合わせて使う。
よくある質問
ファイルを選ぶ画面にするにはどうすればいい?
msoFileDialogFolderPicker の部分を msoFileDialogFilePicker に変えるだけです。フォルダではなく、ファイルを選ぶ画面が表示されます。
最初から特定のフォルダを開いた状態にできる?
できます。
.Show の前に .InitialFileName = "C:¥Users¥Username¥Documents¥" のように書くと、指定したフォルダが最初から開いた状態でダイアログが表示されます。
選んだフォルダのパスをセルに保存したい場合は?
MsgBox の代わりに Range("A1").Value = folderPath と書くと、選んだフォルダのパスをセルに書き込めます。次回マクロを実行するときにそのパスを読み込む、という使い方もできます。
サブフォルダの中のファイルも一覧に出したい場合は?
Dir はそのフォルダの直下にあるファイルしか取得できません。
サブフォルダの中も含めて一覧化したい場合は、サブフォルダを1つずつ開いてその中も調べる処理を追加する必要があります。少し複雑になるので、まずは基本の形に慣れてから挑戦するのがおすすめです。
特定の種類のファイルだけを一覧に出したい場合は?
Dir(folderPath & "*.*") の *.* の部分を変えると、取得するファイルの種類をしぼれます。たとえばExcelファイルだけにしたい場合は *.xlsx、テキストファイルだけにしたい場合は *.txt と書きます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



