和風スパゲティのレシピ

日本語でコーディングするExcelVBA

ダイアログボックスでフォルダを指定・選択する

マクロの実行中に、ダイアログボックスを開き、
ユーザーにフォルダを指定・選択してもらうコードを紹介します。


↓これがダイアログボックスです。
フォルダ選択のダイアログボックス
変なの映ってないよね…?

ソースコード

メインコードにべた書きすると非常に見づらいコードになるため、
汎用関数として作成します。

Function GetPathダイアログボックスでフォルダを選択する(Optional Path初期表示フォルダ As String = "") As String
    With Application.FileDialog(msoFileDialogFolderPicker)

        If Path初期表示フォルダ <> "" Then .InitialFileName = Path初期表示フォルダ

        If .Show Then: GetPathダイアログボックスでフォルダを選択する = .SelectedItems(1)
    
    End With
End Function

使い方

ユーザーが選択したフォルダのパスを返す関数なので、Stringの変数に入れたりして使います。

Dim Path保存先フォルダ As String
Path保存先フォルダ = GetPathダイアログボックスでフォルダを選択する
    
If Path保存先フォルダ = "" Then
    MsgBox ("保存先のフォルダが指定されなかったため、ファイルを保存できませんでした。")
Else
    wb作成ブック.SaveAs Path保存先フォルダ & "\○○.xlsx"
End If

キャンセルボタンが押されるなど、フォルダが取得できなかった場合は""を返します。


省略可能な引数として設定した「初期表示フォルダ」を渡すと、
ダイアログを開いたときに表示するフォルダを指定できます。

Const Path推奨保存先フォルダ = "\\○○\△△\□□"
Path保存先フォルダ = GetPathダイアログボックスでフォルダを選択する(Path推奨保存先フォルダ)

コードの解説

覚えて得するものがなさそうなので、特に解説はしません。

私はFileDialogオブジェクトをこの用途以外に活用したことないです。


ネットからコピペしたコードをメインコードにベタ打ちすると、
後で読み返すときに解読が必要になって良くないです。

しかし、こんな一発屋コードの意味をいちいち理解するのは面倒です。


そんなときは、こうやって関数に隠しちゃえばいいのです。

「ダイアログボックスでフォルダを選択する」という日本語の意味と、
「GetPath」という返り値の仕様が分かれば、
関数の中身は二度と(一度も?)見なくて良くなります。


この関数をコピペしたら、
「GetPath + Ctrl + Space で呼び出せる」
ことだけ覚えてください。

他のことは(正確な関数名すら)忘れてOKです。