【Excel VBA】ユーザーにフォルダを選択させるダイアログの表示方法(2種類)

マクロで作成したファイルを特定のフォルダに保存したり、特定のフォルダ内にある複数のファイルを一括で処理したりする際に、その対象フォルダをユーザー自身に選んでもらいたい、という場面は非常に多くあります。

VBAには、このような「フォルダ選択」ダイアログボックスを表示するための方法が主に2つ用意されています。この記事では、それぞれの特徴と使い方を解説します。


目次

方法1:Application.FileDialog を使う方法(推奨)

Application.FileDialogオブジェクトは、Excelに標準で組み込まれている機能で、モダンなフォルダ選択ダイアログを表示できます。コードがシンプルで分かりやすく、現在ではこちらの方法が最も推奨されます。

完成したVBAコード

Sub SelectFolder_WithFileDialog()

    ' 変数を宣言します
    Dim folderPath As String
    
    ' FileDialogオブジェクトを「フォルダ選択モード」で作成
    With Application.FileDialog(msoFileDialogFolderPicker)
        
        ' ダイアログのタイトルを設定
        .Title = "処理対象のフォルダを選択してください"
        
        ' ダイアログを表示し、「OK」が押されたかを判定
        ' .Showが-1を返す場合、OKが押されたことを意味します
        If .Show = -1 Then
            ' 選択されたフォルダのパスを取得
            folderPath = .SelectedItems(1)
            MsgBox "以下のフォルダが選択されました。" & vbCrLf & folderPath
        Else
            ' 「キャンセル」が押された場合
            MsgBox "フォルダの選択がキャンセルされました。"
        End If
        
    End With

End Sub

コードのポイント解説

  • Application.FileDialog(msoFileDialogFolderPicker): FileDialogオブジェクトを生成します。引数にmsoFileDialogFolderPickerを指定することで、「フォルダ選択」モードになります。
  • .Show = -1: .Showメソッドでダイアログが表示されます。ユーザーが「OK」ボタンを押すと-1が、キャンセルすると0が返ってくるため、If文で分岐させます。
  • .SelectedItems(1): ユーザーが選択したフォルダのフルパスが、このプロパティに格納されています。

方法2:Shell.Application を使う方法(旧来の方法)

Windowsのシェル機能を呼び出す、より古くから使われている方法です。少し古い形式のダイアログが表示されます。

完成したVBAコード

Sub SelectFolder_WithShell()

    ' 変数を宣言します
    Dim shellApp As Object
    Dim selectedFolder As Object
    Dim folderPath As String
    
    ' Shell.Applicationオブジェクトを生成
    Set shellApp = CreateObject("Shell.Application")
    
    ' フォルダ選択ダイアログを表示
    ' 引数: (ウィンドウハンドル, タイトル, オプション)
    Set selectedFolder = shellApp.BrowseForFolder(0, "処理対象のフォルダを選択してください", 0)
    
    ' フォルダが選択されたかを判定
    If Not selectedFolder Is Nothing Then
        ' 選択されたフォルダのパスを取得
        folderPath = selectedFolder.Self.Path
        MsgBox "以下のフォルダが選択されました。" & vbCrLf & folderPath
    Else
        ' 「キャンセル」が押された場合
        MsgBox "フォルダの選択がキャンセルされました。"
    End If
    
    ' オブジェクトを解放
    Set selectedFolder = Nothing
    Set shellApp = Nothing

End Sub

コードのポイント解説

  • CreateObject("Shell.Application"): Windowsのシェル機能を操作するためのオブジェクトを生成します。
  • .BrowseForFolder(...): フォルダ選択ダイアログを表示するメソッドです。
  • If Not selectedFolder Is Nothing Then: ユーザーが「キャンセル」ボタンを押した場合、戻り値は空のオブジェクトNothingになります。これを利用して分岐を判定します。

まとめ

方法ダイアログの外観コードの簡潔さ推奨度
Application.FileDialogモダンで使いやすい簡潔で直感的高(強く推奨)
Shell.Application古いツリー形式やや複雑低(互換性維持などの特殊な場合)

結論として、これから新しくコードを書くのであれば、シンプルで高機能なApplication.FileDialogメソッドを利用するのが最適です。

ユーザーにフォルダを選択させる機能は、マクロの柔軟性と利便性を大きく向上させます。このテクニックをマスターして、より使いやすいVBAツールを作成しましょう。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次