マクロで作成したファイルを特定のフォルダに保存したり、特定のフォルダ内にある複数のファイルを一括で処理したりする際に、その対象フォルダをユーザー自身に選んでもらいたい、という場面は非常に多くあります。
VBAには、このような「フォルダ選択」ダイアログボックスを表示するための方法が主に2つ用意されています。この記事では、それぞれの特徴と使い方を解説します。
方法1:Application.FileDialog を使う方法(推奨)
Application.FileDialogオブジェクトは、Excelに標準で組み込まれている機能で、モダンなフォルダ選択ダイアログを表示できます。コードがシンプルで分かりやすく、現在ではこちらの方法が最も推奨されます。
完成したVBAコード
Sub SelectFolder_WithFileDialog()
' 変数を宣言します
Dim folderPath As String
' FileDialogオブジェクトを「フォルダ選択モード」で作成
With Application.FileDialog(msoFileDialogFolderPicker)
' ダイアログのタイトルを設定
.Title = "処理対象のフォルダを選択してください"
' ダイアログを表示し、「OK」が押されたかを判定
' .Showが-1を返す場合、OKが押されたことを意味します
If .Show = -1 Then
' 選択されたフォルダのパスを取得
folderPath = .SelectedItems(1)
MsgBox "以下のフォルダが選択されました。" & vbCrLf & folderPath
Else
' 「キャンセル」が押された場合
MsgBox "フォルダの選択がキャンセルされました。"
End If
End With
End Sub
コードのポイント解説
Application.FileDialog(msoFileDialogFolderPicker):FileDialogオブジェクトを生成します。引数にmsoFileDialogFolderPickerを指定することで、「フォルダ選択」モードになります。.Show = -1:.Showメソッドでダイアログが表示されます。ユーザーが「OK」ボタンを押すと-1が、キャンセルすると0が返ってくるため、If文で分岐させます。.SelectedItems(1): ユーザーが選択したフォルダのフルパスが、このプロパティに格納されています。
方法2:Shell.Application を使う方法(旧来の方法)
Windowsのシェル機能を呼び出す、より古くから使われている方法です。少し古い形式のダイアログが表示されます。
完成したVBAコード
Sub SelectFolder_WithShell()
' 変数を宣言します
Dim shellApp As Object
Dim selectedFolder As Object
Dim folderPath As String
' Shell.Applicationオブジェクトを生成
Set shellApp = CreateObject("Shell.Application")
' フォルダ選択ダイアログを表示
' 引数: (ウィンドウハンドル, タイトル, オプション)
Set selectedFolder = shellApp.BrowseForFolder(0, "処理対象のフォルダを選択してください", 0)
' フォルダが選択されたかを判定
If Not selectedFolder Is Nothing Then
' 選択されたフォルダのパスを取得
folderPath = selectedFolder.Self.Path
MsgBox "以下のフォルダが選択されました。" & vbCrLf & folderPath
Else
' 「キャンセル」が押された場合
MsgBox "フォルダの選択がキャンセルされました。"
End If
' オブジェクトを解放
Set selectedFolder = Nothing
Set shellApp = Nothing
End Sub
コードのポイント解説
CreateObject("Shell.Application"): Windowsのシェル機能を操作するためのオブジェクトを生成します。.BrowseForFolder(...): フォルダ選択ダイアログを表示するメソッドです。If Not selectedFolder Is Nothing Then: ユーザーが「キャンセル」ボタンを押した場合、戻り値は空のオブジェクトNothingになります。これを利用して分岐を判定します。
まとめ
| 方法 | ダイアログの外観 | コードの簡潔さ | 推奨度 |
Application.FileDialog | モダンで使いやすい | 簡潔で直感的 | 高(強く推奨) |
Shell.Application | 古いツリー形式 | やや複雑 | 低(互換性維持などの特殊な場合) |
結論として、これから新しくコードを書くのであれば、シンプルで高機能なApplication.FileDialogメソッドを利用するのが最適です。
ユーザーにフォルダを選択させる機能は、マクロの柔軟性と利便性を大きく向上させます。このテクニックをマスターして、より使いやすいVBAツールを作成しましょう。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
