和風スパゲティのレシピ

日本語でコーディングする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

使い方

    Const Path推奨の保存先フォルダ = "\\○○\△△\□□"

    Dim Path保存先フォルダ As String
    Path保存先フォルダ = GetPathダイアログボックスでフォルダを選択する(Path推奨の保存先フォルダ)
    
    If Path保存先フォルダ = "" Then
        MsgBox ("保存先のフォルダが指定されなかったため、ファイルを保存できませんでした。")
    Else
        wb作成ブック.SaveAs Path保存先フォルダ & "\○○.xlsx"
    End If
  • ユーザーが選択したフォルダのパスを返す関数なので、Stringの変数に入れたりして使います。
  • 初期フォルダ(省略可)のパスを渡すと、ダイアログを開いた際に表示されるフォルダを指定できます。
  • キャンセルボタンが押されるなど、フォルダが取得できなかった場合は""を返します。

コードの解説

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

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


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

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


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

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


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

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