VBA「フォルダ選択」ダイアログを表示させる|Excel VBA

2018/02/11


今回は、VBAを使って「フォルダ選択」をさせる ダイアログボックス を表示させ、ユーザーが選択した フォルダ名 を含むPathを テキストボックスに表示 させる方法について解説します。

過去記事で「ファイルを開く」ダイアログを表示させる方法を扱いましたが、今回は フォルダを選択するためのダイアログです。

今回も「完コピ」できるサンプルコードを用意するのでじっくりお付き合いください。

VBAでフォルダ選択をさせるために

フォルダ選択のためのダイアログボックスを表示するやり方は複数ありますが、今回は Shell を使うパターンで紹介します。

なぜなら私がこちらのパターンをよく使うから。


「フォルダーの参照」ダイアログ

この記事のタイトルにも「フォルダ選択」ダイアログと表記していますが、Shellを使う場合「フォルダーの参照」と表示されたダイアログボックスになります。

今回は Shell を使うのでこんな感じです;
▲エクスプローラに近いイメージ

このダイアログを表示させることができると、VBAで処理すべき フォルダをユーザーが任意で指定することが可能 になり、運用に柔軟性が出てきます。

ユーザーフォームを用意する

下のようなユーザーフォームを用意します。

今回用意したのは、①「参照」ボタン、② 選択したフォルダ名を含む Path が表示される「テキストボックス」、③ 選択したフォルダに対してなんらかの処理を開始する「処理開始」ボタンの3つのオブジェクトを配置したユーザーフォームです。

▲超シンプルなユーザーフォーム

※この記事を読んでいる方には、フォームやオブジェクトの配置方法についての説明は不要と判断しました。

一連の流れとしては;

1.「参照」ボタンをクリック
2. [フォルダーの参照] ダイアログを表示
3. ユーザーが フォルダ選択 をする
4. 選択されたフォルダ名をテキストボックスに表示
5. 「処理開始」ボタンを自動選択

今回のトピックでは「処理開始」ボタンはただの飾りです。

参照ボタンをクリックしたときのイベント

今回のポイントは「参照」ボタンをクリックしたときのイベントが全てです。

ここで使用するのが、CreateObject関数 です。

CreateObject関数

CreateObject関数の構文は;

CreateObject(class)

このように表されます。
今回はこの戻り値を Folder という変数に代入します。

Set Folder = CreateObject("Shell.Application"). _
  BrowseForFolder(0, "フォルダを選択してください", 0, "C:¥")

"フォルダを選択してください" の部分はテキストを自由に指定できます。
また、赤字の , "C:¥" の部分は省略が可能です。

省略すると上のサンプルのように;
このような表示になります。

赤字のように Cドライブを指定すると;
このようにデフォルトで Cドライブが開きます。

状況によって使い分けてください。

選択したフォルダのPathをテキストボックスへ

つぎに、「フォルダーの参照」でフォルダ選択した情報を テキストボックスに表示させます。

txtFolder.Value = Folder.Self.Path

txtFolder とはテキストボックスにつけられた任意の名称です。

これで骨格部分は網羅できました。

使用例

サンプルコード

以下のコードは「参照」ボタン(=cmdSearch)をクリックしたときのイベントです。
まんまコピーして使えるはずです。

Option Explicit


'*********************************************************
'「フォルダ選択」ダイアログボックスを表示する
'*********************************************************
Private Sub cmdSearch_Click()
  Dim Folder As Object

  Set Folder = CreateObject("Shell.Application"). _
   BrowseForFolder(0, "フォルダを選択してください", 0, "C:\")
  If Not Folder Is Nothing Then
    txtFolder.Value = Folder.Self.Path
    cmdShori.SetFocus
  End if
End Sub
'-----------------<< End of Source >>------------------

赤字部分、cmdShori.SetFocus のくだりは、ファイル名がテキストボックスに表示されたら「処理開始」ボタンを選択した状態にするという意味です。


実際の画面の展開イメージ

▲[参照] をクリック

▲[フォルダーの参照] ダイアログが表示される

▲フォルダを選択して [OK] をクリック

▲フォルダ名がテキストボックスに表示されて [処理開始] ボタンが選択された

以上で「フォルダ選択」ダイアログボックスを表示させる の解説は終了です。
みなさんの役に立てば幸いです。

関連記事



併せて読んでおくとさらに便利

VBA [ファイルを開く] ダイアログボックスを表示させる|EXCEL VBA
VBA・ダイアログボックス
VBAで [ファイルを開く] ダイアログ ボックスを表示させ、選択したファイル名をテキストボックスに表示させるまでを解説。GetOpenFilenameメソッドを、使用例もサンプルコードを公開しています。

VBA カレントフォルダの取得と設定・変更|Excel VBA
VBA・CurDir関数
VBAで カレントフォルダ名 を取得したり、設定(指定)したり変更(移動)したりする方法について解説します。CurDir関数 や ChDirステートメント などの使い方についても触れています。

VBAで最終行を取得する方法と そこからできること|Excel VBA
VBA・最終行
VBAで最終行を取得する方法を解説。最終行の行番号を取得できることにより最終行の削除や、最終行までセルを選択したり繰り返したり色々なことが可能になります。

VBAで空白行を削除する方法|Excel VBA 高速技
VBA・Unionメソッド
VBAを使って空白行の削除方法を解説します。Unionメソッド を使用して空白行を高速で一括削除する方法をサンプルコード付きで解説。ぜひ参考にしてください。

VBAでパスワード入力フォームを作ってみました|Excel VBA
VBA・ユーザーフォーム
『VBAでパスワード入力フォームを作る方法』。ユーザーにパスワードを入力させたい状況に出くわしたら、自分で「パスワード入力フォーム」を作るのがベストです。

※その他、関連記事はこの記事の下の方にもあります。

-EXCEL&VBA
-,

シェアしていただけると助かります。