Excel VBA:FileDialogを使用してフォルダのみ選択できる[参照]ダイアログボックスを表示するサンプルプログラム

Excel

FileDialogを使用してGetOpenFilenameではできない、フォルダのみ選択できる[参照]ダイアログボックスを表示して選択されたフォルダのパスを取得するサンプルプログラムを覚え書き。

[参照]ダイアログボックスの初期フォルダを指定した上で表示する方法についても紹介しています。

ExcelのVBAでGetOpenFilenameを使用して[ファイルを開く]ダイアログボックスを表示して選択されたファイル名を取得することはできるけど、例えばファイルまでの選択は必要なくてフォルダのみ選択させたい場合には、GetOpenFilenameではできない。

使われるダイアログボックス自体が別物になるので当たり前ではあるんだけれど。

FileDialogオブジェクトを使用した[参照]ダイアログボックスを表示するサンプルプログラムの動作前提条件

後述するExcelのVBAのサンプルプログラムの動作確認は、Excel 2013で行っています。

また、FileDialogオブジェクトを使用する際には必ず[参照設定]で以下のオブジェクトライブラリの参照を有効にしておく必要があります。

参照を有効化するオブジェクトライブラリ

Microsoft Office 15.0 Object Library

※15.0というバージョンは、Excelのバージョンによって異なります。

オブジェクトライブラリの参照手順

以下に「Microsoft Office 15.0 Object Library」の参照手順を記載します。

  1. Excelのリボンツールバーの[開発]タブをクリックする。
  2. [開発]タブの左端にある[Visual Basic]をクリックする。
  3. [Microsoft Visual Basic for Applications]画面(VBAエディタ)が開くので[ツール]メニューの[参照設定]をクリックする。
  4. [参照可能なライブラリ ファイル]の一覧(五十音順に並んでいます)から「Microsoft Office 15.0 Object Library」のチェックをオンにして[OK]をクリックする。

Microsoft Office 15.0 Object Library

[参照]ダイアログボックスの表示

[参照]ダイアログボックスは、以下のようにフォルダのみユーザーが選択できるダイアログボックスです。

フォルダだけを指定できる[参照]ダイアログボックス

[参照]ダイアログボックスをExcelのVBAで表示するには、FileDialogプロパティを使用します。

FileDialogプロパティは、指定するオプション次第で[ファイルを開く]ダイアログボックスや[名前をつけて保存]ダイアログボックスとして表示することもできます。

FileDialogプロパティを使用して[参照]ダイアログボックスを表示するサンプルプログラム

まずは簡単な[参照]ダイアログボックスの表示サンプルプログラムを以下に紹介します。

[参照]ダイアログボックスを表示し、選択されたフォルダをメッセージボックスで表示するサンプルプログラムです。

[キャンセル]ボタンが押された時の処理を追加したサンプルプログラム

上記のサンプルプログラムだと[参照]ダイアログボックスで[キャンセル]ボタンが押された場合、エラーとなってしまうので、[キャンセル]ボタンが押された時の処理を追加します。

FileDialogプロパティを使用して[参照]ダイアログボックスを表示する際の初期フォルダを指定して表示するサンプルプログラム

[参照]ダイアログボックスを開く際にあらかじめ指定したフォルダを初期フォルダとして選択された状態で表示するサンプルプログラムです。

初期フォルダの指定は、”InitialFileName”に初期フォルダとして選択させたいフォルダのパスを指定します。

初期フォルダを指定して[参照]ダイアログボックスを開くサンプルプログラム

FileDialogプロパティを使用して[お気に入り]フォルダなど特殊なフォルダを初期フォルダとして選択させた状態で表示するサンプルプログラム

[参照]ダイアログボックスの初期フォルダとして[お気に入り]フォルダや[デスクトップ]フォルダを初期フォルダとして指定したい場合のサンプルプログラムです。

[お気に入り]フォルダや[デスクトップ]フォルダは、ログインするユーザーごとにパスが変わるため、プログラム内でパスを固定で指定することができません。

これらの特殊なフォルダのパスを初期フォルダとして指定したい場合は、”Windows Script Host”オブジェクトを使用してパスを取得します。

指定できる特殊フォルダ一覧

上記の方法で指定できる特殊フォルダは以下のとおりです。

“SpecialFolders”の引数に下記の”対応するフォルダ”の”指定する文字列”の値を”(ダブルクォーテーション)でくくって指定すればよいです。

指定する文字列対応するフォルダ
Desktopデスクトップフォルダ
Favoritesお気に入りフォルダ
Fontsフォントフォルダ
MyDocumentsマイドキュメントフォルダ
Programsプログラムフォルダ
Recent最近開いたファイルフォルダ
SendTo送るフォルダ
StartMenuスタートアップメニューフォルダ
StartUpスタートアップフォルダ

FileDialogプロパティを使用して[Windows]フォルダなどのシステムフォルダを初期フォルダとして選択させた状態で表示するサンプルプログラム

[Windows]フォルダ、[System32]フォルダ、[Temp]フォルダを初期フォルダとして指定したい場合は、”FileSystemObject”オブジェクトを使用して各フォルダのパスを取得します。

[Windows]フォルダはインストール時にユーザーが任意に指定できるので、必ずしも”C:\Windows”とは限りませんし、[Temp]フォルダもログインユーザーごとに異なるパスとなるため、プログラム内で固定して指定することができません。

システムフォルダを初期フォルダとして指定するサンプルプログラム

各システムフォルダと対応する値

プログラム中の”GetSpecialFolder”に指定する数値によって、[Windows]フォルダ、[System32]フォルダ、[Temp]フォルダのどのフォルダが指定されているのかが決まっているので、指定したいフォルダを表す数値を”GetSpecialFolder”の引数に指定してください。

指定する値フォルダ
0[Windows]フォルダ
1[System32]フォルダ
2[Temp]フォルダ

FileDialogプロパティを使用して[参照]ダイアログボックスを表示するサンプルプログラムのまとめ

FileDialogプロパティを使用してフォルダのみ選択できるダイアログボックスを表示するサンプルプログラムを紹介しました。

FileDialogプロパティに指定するオプション次第では[ファイルを開く]や[名前をつけて保存]ダイアログボックスとして使用することもできます。

FileDialogプロパティに関する詳細は、Microsoftの「Office デベロッパーセンター」の「Application.FileDialog プロパティ (Excel)」にも記載されているので参考にしてください。

また[お気に入り]フォルダや[Windows]フォルダなどの特殊なフォルダのパスを取得する方法については、以下の記事にも記載されているので参考にしてください。

ユーザーごとにパスが異なるマイドキュメントフォルダやデスクトップフォルダ、その他Windowsフォルダ、Systemフォルダなどの特殊なフォルダのパスをVBAで取得するサンプルプログラムを覚書。

ExcelのVBAで[ファイルを開く]ダイアログボックスや[名前をつけて保存]ダイアログボックスを使用するサンプルについては、以下の記事がありますので参考にしてください。

ExcelのVBAを使用して[ファイルを開く]ダイアログボックスを表示し、選択されたファイルの名前を取得するサンプルプログラム。 ExcelのVBAで用意されているGetOpenFilenameメソッドを使えば簡単にできます。
ExcelのVBAを使用して[ファイルを開く]ダイアログボックスを表示し、選択されたファイルの名前を取得するサンプルプログラム。 ExcelのVBAで用意されているGetOpenFilenameメソッドを使えば簡単にできます。

FileDialogプロパティについては、AccessのVBAの過去の記事で結構あるので、参考にしてください。

FileDialogプロパティは、ExcelだけでなくAccessなど他のOfficeアプリケーションのVBAで共通して使えます。

FileDialogプロパティに関する記事は、過去何件か書いているので参考にしてください。