【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ツールを作成しましょう。

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

この記事を書いた人

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

目次