フォルダを自分で選ばせたいとき、どうすれば良いでしょうか?
Excelマクロでファイルを扱うとき、次のような悩みはありませんか?
- 「処理対象のフォルダを毎回コードで書き換えるのが面倒」
- 「他の人にも使わせたいけど、パスを変えてもらうのが大変」
- 「処理のたびにフォルダを選べたら便利なのに…」
そんなときに役立つのが、「フォルダ選択ダイアログを表示する方法」です。
実装するメリット
- 利用者が毎回、フォルダを手動で選べるようになる
- コードを何度も書き換えずに済む
- 汎用性の高いマクロが作れる
- 他の人と共有しやすくなる
Application.FileDialog
VBAでフォルダを選ばせるには、次のような構文を使います。
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
「フォルダを選択する」ための種類です。これを変えるとファイル選択などもできます。.Show = -1
→ ダイアログで「OK」が押された場合にTrue(-1)になります。.SelectedItems(1)
→ 選ばれたフォルダのパスを取得します(配列のような形式)。
よくある質問と注意点
Q:複数のフォルダを選べますか?
.AllowMultiSelect = True
にすれば可能ですが、フォルダ選択では非対応のことが多いです。
Q:キャンセルされたときの処理は?
.Show = -1
のチェックを使って、キャンセルされたら何もしないようにできます。
Q:ファイルを選ばせるには?
msoFileDialogFilePicker
に変更すればOKです。
応用:選択したフォルダのファイルを一覧に表示
Sub ListFilesInSelectedFolder()
Dim folderPath As String
Dim fileName As String
Dim i As Long
'フォルダパスの最後に¥があればそのまま、ないのであれば、¥をつける
If Application.FileDialog(msoFileDialogFolderPicker).Show = -1 Then
folderPath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
If Right(folderPath, 1) <> "¥" Then
folderPath = folderPath & "¥"
End If
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 Sub
まとめ
FileDialog
を使うことで、利用者が自由にフォルダを選択できるようになり、マクロの柔軟性が大きく向上します。
これにより、利用者自身が処理対象のフォルダをその場で選べるようになり、コードを変更することなく何度でも使い回せるマクロを作ることが可能になります。
さらにこの仕組みは、フォルダ選択だけでなく、ファイル単位の選択や複数ファイル処理にも応用が可能です。最初は少し難しく感じるかもしれませんが、FileDialog
の構造に慣れれば、非常に実用的で扱いやすいツールになります。
ぜひ今回紹介したコードを参考に、「実務で使える、柔軟なマクロ」を1つ作ってみてください。小さな一歩から、VBAの世界がぐっと広がっていきます。
コメント