【VBA】フォルダ選択をダイアログで実行するやり方!初心者でもマスターできる完全ガイド
VBAでフォルダ選択を自動化したいけど、コードが難しそう。。。
こんな問題を解決するために
図やサンプルコードを使ってVBA初心者でも理解できるよう解説
していきます。
難しいと感じるかもしれませんが、
フォルダ選択を自動化するVBAはたった数行のコードでも実現可能
なんです。
InputBoxでのパス入力に比べて操作ミスが95%削減でき、ユーザビリティが劇的に向上する方法をお教えします。
明日からすぐに使える実践的なサンプルコードも多数掲載しているので、ぜひ最後までご覧ください。
VBAフォルダ選択ダイアログとは?基本概念を理解しよう
『ダイアログでフォルダ選択するVBA』を使えば、簡単にフォルダの選択やフォルダパス情報を取得することが可能となります。
これはExcelマクロを作る際に非常に重要な機能で、手動でパスを入力する手間を省き、操作ミスを防ぐことが可能です。
フォルダを選択するダイアログは、
Windowsの標準的なフォルダ参照画面を表示するため誰でも直感的に使えるのが特徴
です。
この機能をマスターすることで、より実用的で使いやすいマクロを作成できるようになります。
『ダイアログでフォルダ選択するVBA』が必要な場面と活用例
『ダイアログでフォルダ選択するVBA』は、ファイルの保存先やデータの読み込み元を指定する場面で威力を発揮します。
たとえば、
レポートを自動生成してユーザーが指定したフォルダに保存したい場合や、複数のExcelファイルを一括処理する際の対象フォルダを選ばせたい場合
に最適です。
また、設定画面でバックアップ先フォルダを指定させたり、画像ファイルの保存場所を選択させたりする際にも重宝します。
ユーザーが直接パスを入力するよりも、視覚的にフォルダを選択できる方が圧倒的に使いやすく入力エラーも防げるのです。
FileDialogオブジェクトの基本的な仕組み
FileDialogオブジェクトは、
Excelに標準搭載されているダイアログ表示機能の核となる仕組み
です。
このオブジェクトは、Application.FileDialogメソッドを通じてアクセスでき、msoFileDialogFolderPickerという定数を指定することでフォルダ選択専用のダイアログを呼び出せます。
内部的には、WindowsのShell APIを使用してシステム標準のフォルダブラウザを表示するため、ユーザーにとって馴染みのある操作感を提供することが可能です。
このオブジェクトは、選択されたフォルダの情報を保持し、VBAコード内で簡単に取得できるようになっています。
他の選択方法との違いとメリット・デメリット
フォルダ選択の方法には、InputBoxでパスを直接入力させる方法もありますが、フォルダ選択ダイアログの方が圧倒的に優れています。
InputBoxは実装が簡単である一方、ユーザーがパスを正確に覚えている必要があり、タイピングミスによるエラーが発生しやすいというデメリットがあります。
一方、フォルダ選択ダイアログは視覚的にフォルダ構造を確認しながら選択できるため、操作ミスが起こりにくく、ユーザビリティが高いのが最大のメリットです。
ただし、プログラム的にはやや複雑になるため、簡単な用途であればInputBoxの方が手軽に実装できる場合もあります。
VBAフォルダ選択ダイアログの基本的な書き方とコード例
『ダイアログでフォルダ選択するVBA』の設定は意外とシンプルで、基本的なコードパターンを覚えれば誰でも使えるようになります。
実装のポイントはこちら
Application.FileDialogオブジェクトを正しく使用すること
ユーザーがキャンセルした場合の処理を適切に行うこと
ここからは、最も基本的なコードから実際に使える実装方法まで段階的に説明していきます。
実際にサンプルコードを動かすことで、様々な場面でフォルダ選択機能を活用できるようになるでしょう。
最もシンプルなフォルダ選択ダイアログのコード
最も基本的なフォルダ選択ダイアログは、わずか数行のコードで実現できます。
基本的な『ダイアログでフォルダ選択するVBA』のサンプルコードはこちら
Sub SimpleFolder()
Dim folder As String
folder = Application.FileDialog(msoFileDialogFolderPicker).Show
If folder <> 0 Then
MsgBox Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
End If
End Sub
上記のコードは、
フォルダ選択ダイアログを表示し、選択されたフォルダパスをメッセージボックスで表示する
という内容です。
実行結果がこちら
msoFileDialogFolderPickerでフォルダ選択専用のダイアログを指定し、Showメソッドでダイアログを表示。
戻り値が0以外の場合は「OK」が押されたことを意味し、SelectedItemsプロパティで選択されたフォルダパスを取得できます。
Application.FileDialogを使った実装方法
より実用的な実装では、FileDialogオブジェクトを変数に格納して詳細な設定を行います。
この方法により、ダイアログのタイトルや初期フォルダを自由にカスタマイズすることが可能。
FileDialogオブジェクトを使ったサンプルコードはこちら
Sub FolderSelectDialog()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "フォルダを選択してください"
.InitialFileName = "C:\Users\"
If .Show = -1 Then
MsgBox "選択されたフォルダ: " & .SelectedItems(1)
Else
MsgBox "キャンセルされました"
End If
End With
End Sub
上記のコードは、
ダイアログのタイトルを「フォルダを選択してください」、ダイアログのスタートを「ユーザー」からスタートする
という内容です。
実行結果がこちら
Withステートメントを使って、Titleプロパティでダイアログのタイトルを変更し、InitialFileNameで初期表示フォルダを指定できます。
Showメソッドの戻り値が-1の場合は「OK」が押されたことを示します。
関連記事「With構文の使い方」では、効率的にVBAコードを書くためのテクニックが紹介されています。
選択されたフォルダパスを取得する方法
エクセル業務では、
選択されたフォルダパスを変数に格納して後続の処理で使用したい!
なんて場面によく遭遇しますよね。
フォルダパスを変数に格納するVBAのサンプルコードはこちら
Sub GetSelectedFolderPath()
Dim selectedPath As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "処理対象のフォルダを選択"
If .Show = -1 Then
selectedPath = .SelectedItems(1)
MsgBox "選択されたパス: " & selectedPath
' ここで selectedPath を使った処理を実行
Call ProcessFiles(selectedPath)
End If
End With
End Sub
Sub ProcessFiles(folderPath As String)
Dim fileName As String
Dim wb As Workbook
Dim processedCount As Integer
' フォルダ内のExcelファイルを検索
fileName = Dir(folderPath & "\*.xlsx")
processedCount = 0
' ファイルが存在する限り処理を継続
Do While fileName <> ""
On Error Resume Next
' Excelファイルを開く
Set wb = Workbooks.Open(folderPath & "\" & fileName)
If Err.Number = 0 Then
' ファイルが正常に開けた場合の処理
Debug.Print "処理中: " & fileName
' 例:A1セルに処理日時を記録
wb.Sheets(1).Range("A1").Value = "処理日時: " & Now
' ファイルを保存して閉じる
wb.Save
wb.Close
processedCount = processedCount + 1
Else
Debug.Print "エラー: " & fileName & " を開けませんでした"
End If
Err.Clear
Set wb = Nothing
' 次のファイルを検索
fileName = Dir()
Loop
MsgBox "処理完了: " & processedCount & "個のファイルを処理しました"
End Sub
上記のコードは、
ダイアログからフォルダを選択。選択したフォルダ内のエクセルファイルを開きA1セルに処理日時を入力し閉じる
という内容です。
選択されたフォルダパスをselectedPath変数に格納 → ProcessFilesという別のサブルーチンに引き渡す → エクセルファイルを検索し処理日時をA1セルに入力する
フォルダ選択機能を他の処理と組み合わせた実用的なマクロに仕上げることができます。
エラーハンドリングも含めた実用的なコードになっているのでコピペして使ってみてください。
関連記事「Resume Nextの使い方」では、エラーを無視する方法が紹介されています。
『ダイアログでフォルダ選択するVBA』のカスタマイズ方法
『ダイアログでフォルダ選択するVBA』は、
標準的な表示だけでなく用途に応じて様々なカスタマイズが可能
です。
適切なカスタマイズを行うことで、
ユーザーにとって使いやすく目的に合った処理を自動化
することができます。
特に、初期表示フォルダの設定やダイアログタイトルの変更は、実用的なマクロを作る上で欠かせない機能です。
ここからは、よく使われるカスタマイズ方法と具体的なサンプルコードを解説していきます。
初期フォルダ(開始フォルダ)を指定する方法
ダイアログを開いた時に最初に表示されるフォルダを指定することで、ユーザーの操作効率を大幅に向上させることができます。
InitialFileNameプロパティを使用することで、目的のフォルダから選択の開始が可能です。
InitialFileNameプロパティを設定したサンプルコードがこちら
Sub SetInitialFolder()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "レポート保存先を選択"
.InitialFileName = "C:\Users\" & Environ("USERNAME") & "\Documents\"
If .Show = -1 Then
MsgBox "保存先: " & .SelectedItems(1)
End If
End With
End Sub
上記のコードは、
Environ(“USERNAME")を使って現在のユーザー名を取得し、そのユーザーのDocumentsフォルダを初期フォルダとして設定する
という内容です。
実行結果がこちら
これにより、多くの場合にユーザーが使いたいフォルダに近い場所から選択を開始できるため、操作性が向上します。
ダイアログのタイトルを変更する方法
ダイアログのタイトルを用途に応じて変更することで、ユーザーに何を選択すべきかを明確に伝えることができます。
Titleプロパティを設定したサンプルコードがこちら
Sub CustomDialogTitle()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "データベースファイルが保存されているフォルダを選択してください"
.InitialFileName = "C:\"
If .Show = -1 Then
Dim selectedFolder As String
selectedFolder = .SelectedItems(1)
MsgBox "データベースフォルダ: " & selectedFolder
End If
End With
End Sub
6行目のコードは、
With構文を使ってダイアログのタイトルを「データベースファイルが保存されているフォルダを選択してください」にする
という内容です。
タイトルは具体的で分かりやすい文言にすることが重要です。
単に「フォルダを選択」ではなく、「何のためのフォルダなのか」を明確に示すことで、ユーザーの迷いを減らし、操作ミスを防ぐことができます。
複数フォルダ選択を可能にする設定
通常のフォルダ選択ダイアログでは一つのフォルダしか選択できませんが、AllowMultiSelectプロパティを使用することで複数のフォルダを同時に選択できるようになります。
AllowMultiSelectプロパティを設定したサンプルコードがこちら
Sub MultipleFolder()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "処理対象のフォルダを複数選択(Ctrl+クリック)"
.AllowMultiSelect = True
If .Show = -1 Then
Dim i As Integer
For i = 1 To .SelectedItems.Count
MsgBox "フォルダ " & i & ": " & .SelectedItems(i)
Next i
End If
End With
End Sub
複数選択が有効な場合、SelectedItems.Countプロパティで選択された項目数を取得でき、For文を使って全ての選択項目を処理できます。
この機能は、複数のフォルダに対して同じ処理を実行したい場合に非常に便利です。
実践的なフォルダ選択ダイアログの活用例
『ダイアログでフォルダ選択するVBA』は、実際の業務で使える実践的なマクロを作成する際に発揮されます。
これから紹介するサンプルコードを参考にすることで、自分の業務に合わせたカスタマイズを行えるようになるでしょう。
実際の現場でよく使われているテクニックも含めて解説していきます。
ファイル保存先を選択するマクロの作成
レポートやデータ出力の際に保存先をユーザーに選択させることで、柔軟性の高いマクロを作成できます。
現在のワークブックをコピーして指定されたフォルダに保存するサンプルコードがこちら
Sub SaveReportToSelectedFolder()
Dim fd As FileDialog
Dim savePath As String
Dim fileName As String
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "レポートの保存先フォルダを選択"
.InitialFileName = "C:\Users\" & Environ("USERNAME") & "\Desktop\"
If .Show = -1 Then
savePath = .SelectedItems(1)
fileName = "月次レポート_" & Format(Date, "yyyymmdd") & ".xlsx"
ActiveWorkbook.SaveCopyAs savePath & "\" & fileName
MsgBox "レポートを保存しました: " & savePath & "\" & fileName
Else
MsgBox "保存がキャンセルされました"
End If
End With
End Sub
上記のコードは、
選択したフォルダ内にエクセルファイル「月次レポート+日付」を作成する
という内容です。
Format関数を使って現在の日付をファイル名に含めることで、同じ名前のファイルが重複するのを防いでいます。
SaveCopyAsメソッドを使用することで、元のファイルを変更せずにコピーを保存できます。
関連記事「名前を付けて保存するVBA」では、ブックを新規作成し名前を付けて保存する方法が紹介されています。
複数ファイルを一括処理するフォルダ指定機能
指定されたフォルダ内のExcelファイルを一括処理するマクロは、データ集計や形式変換などで頻繁に使用されます。
選択されたフォルダ内の全てのエクセルファイルの情報を取得するサンプルコードがこちら
Sub ProcessFilesInSelectedFolder()
Dim fd As FileDialog
Dim folderPath As String
Dim fileName As String
Dim fileCount As Integer
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "一括処理するフォルダを選択"
If .Show = -1 Then
folderPath = .SelectedItems(1)
fileName = Dir(folderPath & "\*.xlsx")
fileCount = 0
Do While fileName <> ""
fileCount = fileCount + 1
Debug.Print "処理中: " & fileName
' ここでファイルごとの処理を実行
fileName = Dir()
Loop
MsgBox "処理完了: " & fileCount & "個のファイルを処理しました"
End If
End With
End Sub
上記のコードは
Dir関数を使ってフォルダ内のExcelファイルを順次取得し、Do While文で全てのエクセルファイル名取得する
という内容です。
実行結果がこちら
Debug.Printでイミディエイトウィンドウに進行状況を表示するため、デバッグ時にも便利です。
関連記事「Dir関数の使い方」では、ファイルの検索、操作を自動化する方法が紹介されています。
VBA初心者が『ダイアログでフォルダを選択するVBA』を導入する方法
VBAなんて扱ったことないけど、業務内容に合わせた『ダイアログでフォルダ選択するVBA』を導入したい!
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、今では自分で効率化マクロをサクッと導入しちゃいます。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。
いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。
あなたに合った方法で導入しちゃいましょう。
マクロ開発を外注に依頼する
マクロ開発を外注に依頼する方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「フォルダ選択作業を自動化したい」「選択したフォルダ情報をリスト化したい」「選択したフォルダ内の写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、
すぐに使っているエクセルにマクロを導入することができます。
VBA初心者でも形になっているマクロをゲットできる、費用が安い、
というメリットがあります。
しかし、
想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『ダイアログでフォルダを選択するマクロ』『選択フォルダ内の写真を全て貼り付けるマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい内容のコードを書くだけ
です。
【VBA フォルダ選択 ダイアログ】【VBA フォルダ一括選択】でネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。