Excel VBAを活用すると、さまざまな自動化処理を実現できます。その中でも、フォルダを選択する機能は、ファイルの読み込み処理や、保存先の指定などで特に役立ちます。この記事では、VBAでフォルダを選択する方法について、初心者にもわかりやすく丁寧に解説していきます。実際に使えるコード例や注意点も紹介しますので、ぜひ参考にしてみてください。
VBAでフォルダを選択するには、いくつかの方法がありますが、最も簡単なのが「Shell.Application」オブジェクトを使う方法です。以下のように記述します。
Sub フォルダを選択する方法1()
Dim shellApp As Object
Dim selectedFolder As Object
Set shellApp = CreateObject("Shell.Application")
Set selectedFolder = shellApp.BrowseForFolder(0, "フォルダを選択してください", 0)
If Not selectedFolder Is Nothing Then
MsgBox "選択されたフォルダのパスは:" & selectedFolder.Items().Item().Path
Else
MsgBox "キャンセルされました"
End If
End Sub
このコードでは、Windowsの標準的なフォルダ選択ダイアログを表示します。選択されたフォルダのパスは、selectedFolder.Items().Item().Path
で取得可能です。
Excel VBAでは「Application.FileDialog」も利用できます。こちらはより簡潔に記述でき、Excelに特化したアプローチです。
Sub フォルダを選択する方法2()
Dim fd As FileDialog
Dim folderPath As String
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "フォルダを選択してください"
.AllowMultiSelect = False
If .Show = -1 Then
folderPath = .SelectedItems(1)
MsgBox "選択されたフォルダ:" & folderPath
Else
MsgBox "キャンセルされました"
End If
End With
End Sub
この方法では、フォルダだけを選択できるダイアログが表示され、選択されたパスを変数に格納できます。シンプルで扱いやすいコードなので、Excelを対象としたマクロでは非常におすすめです。
方法 | 特徴 | 利用環境 |
---|---|---|
Shell.Application | 汎用的。全Officeアプリで使える | Excel、Word、Accessなど |
FileDialog | Excel専用。コードが簡潔 | Excel VBAのみ |
Officeアプリケーションごとの特性に合わせて、適切な方法を選ぶと良いでしょう。汎用性を求める場合はShell.Application、ExcelだけならFileDialogが効率的です。
選択したフォルダのパスをExcelシートのセルに書き込むことで、後続の処理に利用できます。以下はその例です。
Sub フォルダパスをセルに書き込む()
Dim fd As FileDialog
Dim folderPath As String
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "保存先フォルダを選択してください"
.AllowMultiSelect = False
If .Show = -1 Then
folderPath = .SelectedItems(1)
Range("A1").Value = folderPath
Else
MsgBox "選択がキャンセルされました"
End If
End With
End Sub
このようにして、ユーザーに選ばせたフォルダのパスを、セルに反映させて保存処理やログ記録などに応用できます。
選択したフォルダ内のすべてのファイル名を一覧で取得するには、以下のようなコードが便利です。
Sub フォルダ内のファイル一覧取得()
Dim fd As FileDialog
Dim folderPath As String
Dim fileName As String
Dim row As Long
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show = -1 Then
folderPath = fd.SelectedItems(1)
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
fileName = Dir(folderPath & "*.*")
row = 1
Do While fileName <> ""
Cells(row, 1).Value = fileName
row = row + 1
fileName = Dir
Loop
MsgBox "ファイル一覧を取得しました。"
Else
MsgBox "選択がキャンセルされました"
End If
End Sub
このコードは、指定したフォルダにあるすべてのファイル名を、シートのA列に順番に出力します。ファイル整理や分析などに応用できる便利なコードです。
VBAでフォルダ選択ダイアログを表示する方法は、マクロのユーザー操作を補助し、より柔軟な処理を可能にします。今回紹介した2つの方法(Shell.ApplicationとFileDialog)は、どちらも簡単に導入できます。用途や使用するアプリケーションに応じて使い分け、実用的なマクロを作成していきましょう。