編集

【ExcelVBA】ファイル選択ダイアログを表示させる

2025/03/26
ExcelVBA#002 ファイル選択ダイアログを表示させる

ExcelVBAでファイル選択ダイアログを表示して、選択したファイルパスを表示させる処理の備忘録です。今回はユーザーインターフェースの部分になるため、簡単な画面設計も含めてご紹介いたします。

やりたいこと

参照ボタンを押して、ファイル選択のダイアログから選んだファイルのパスをセルに表示させるようにします。

画面設計

シート名を「入力画面」と名前を変更し、画像の通りセルB2に項目名、セルC2にファイルパスの入力欄、D2に参照ボタンを配置します。ボタンはCommandボタンでも良いのですが...デザイン性を重視?して、図形で作ってみました。色をグラデーションにするとボタンっぽくなります。

画面設計

セルC2に「ファイルパス」と名前を付けてください(セルC2をアクティブにして名前ボックスに名前を入れてEnterで確定します)。名前を修正する場合は、メニューから「数式」 ➡ 「名前の管理」 で変更できます。

セルの名前付け

ソースコードを書き終えたら、参照ボタンを右クリックして「マクロの登録」からファイル選択のマクロを紐づけします。

マクロの登録

ソースコード(ExcelVBA)

Option Explicit
Private ObjWSH As WshShell

Sub ファイル選択()

    Set ObjWSH = New WshShell

    Dim dlFolder As String
    dlFolder = ObjWSH.SpecialFolders("Desktop")
    dlFolder = Replace(dlFolder, "Desktop", "Downloads")
    ChDrive Drive:="C"
    ChDir Path:=dlFolder

    Dim fileGroup As String: fileGroup = "CSV"
    Dim filePath As String
    Select Case fileGroup
        Case "EXCEL"
            filePath = Application.GetOpenFilename(FileFilter:="Excelブック,*.xlsx")
        Case "CSV"
            filePath = Application.GetOpenFilename(FileFilter:="CSVファイル,*.csv")
        Case "ALL"
            filePath = Application.GetOpenFilename(FileFilter:="全てのファイル,*.*")
    End Select

    If filePath <> "False" Then
        ThisWorkbook.Worksheets("入力画面").Range("ファイルパス") = filePath
    Else
        MsgBox "キャンセルしました。"
    End If

End Sub

ポイント

  1. 実行にはツールの参照設定から「Windows Script Host Object Model」にチェックを入れてください。
  2. SpecialFolders(”Desktop”)でデスクトップのパスを取得し、その後Replaceでダウンロードフォルダに書き換えています。ChDir Pathでダウンロードフォルダを初期位置としています。
  3. Select文でExcelファイルのみ・CSVファイルのみなどのファイル指定ができます。Caseを増やすことで他の拡張子も対応可能です。
  4. ファイル選択ダイアログで「キャンセル」ボタンを押した場合(FilePathがFalseの場合)の処理も対応しています。