MENU

【完全ガイド】VBAでファイル選択ダイアログを表示する方法|GetOpenFilenameの使い方と応用テク

VBAでユーザーにファイルを選択させたい場合、Application.GetOpenFilename メソッドを使用すると、ファイル選択ダイアログを簡単に表示できます。

この記事では、Application.GetOpenFilename メソッドの基本構文から各引数の意味ファイルフィルターの設定方法複数ファイル選択のやり方キャンセル時の処理方法、さらに初期フォルダ指定の応用テクニックまで、実務に役立つ内容を徹底解説します。

GetOpenFilenameの基本構文と引数

Application.GetOpenFilename メソッドは、ファイル選択ダイアログを表示し、選択されたファイルのフルパスを返します。

GetOpenFilenameの基本構文

下記がApplication.GetOpenFilename メソッドの基本構文です。

Application.GetOpenFilename([FileFilter], [FilterIndex], [Title], [ButtonText], [MultiSelect])

GetOpenFilenameの引数(全て省略可)

Application.GetOpenFilename メソッドの引数は下表の通りですが、全ての引数が省略可能であり、

引数説明
FileFilter表示するファイルの種類を指定(例:”Excel ファイル (*.xlsx), *.xlsx”)
FilterIndexデフォルトで選択されるフィルターの番号(1から始まる)
Titleダイアログのタイトルバーに表示される文字列
ButtonTextMac専用:ボタンのラベルを指定(Windowsでは無視される)
MultiSelect複数選択を許可するか(True=複数可、False=1つのみ)

Application.GetOpenFilename メソッドの引数は表に示す通りですが、全ての引数が省略可能であり、最もシンプルな形式では下記コードのように記述できます。

Dim filePath as String
filePath = Application.GetOpenFilename()

GetOpenFilenameの戻り値

Application.GetOpenFilename メソッドの戻り値は、ユーザーがファイル選択したか、もしくはキャンセルしたかによって異なります。

さらに、ファイル選択が単一か複数かによっても下表のように異なります。

MultiSelect の値ユーザーがファイル選択した場合ユーザーがキャンセルした場合
False(省略時も含む)ファイルパスの文字列(Variant型)False(Boolean型)
Trueファイルパスの配列(Variant型)
  • MultiSelect=False(単一選択)時 → 選択されたファイルのフルパス(Variant型)
  • MultiSelect=True(複数選択)時 → ファイルパスの配列(Variant型)

GetOpenFilenameの基本コード

Application.GetOpenFilename メソッドの基本コードは下記の通りです。

Sub SelectFile()
    Dim filePath As Variant
    filePath = Application.GetOpenFilename()
    
    If filePath = False Then
        MsgBox "ファイルが選択されませんでした。"
    Else
        MsgBox "選択されたファイル: " & filePath
    End If
End Sub

ユーザーのファイル選択結果を変数filePathに格納して、filePathの値によってファイルが選択されているかどうかを判定しています。

ファイルフィルターの設定方法

Application.GetOpenFilename メソッドでは、特定のファイルに絞り込んだ状態で選択ウィンドウを表示することができます。

Sub SelectExcelFile()
    Dim filePath As Variant
    filePath = Application.GetOpenFilename("Excelファイル (*.xlsx), *.xlsx")

    If filePath = False Then
        MsgBox "ファイルが選択されませんでした。"
    Else
        MsgBox "選択されたファイル: " & filePath
    End If
End Sub

上記コードを実行すると、下図のようにワード・パワーポイント・エクセル等複数の種類のファイルが保存されている場合でも、エクセルファイル(拡張子が.xlsx)のみを選択できるようにすることもできます。

ファイルフィルターの構文

Application.GetOpenFilename メソッドでファイルフィルターを設定するための構文は下記の通りです。

Application.GetOpenFilename("任意の説明,文字列パターン,任意の説明,文字列パターン,...")

文字列パターンには、絞り込みたいファイルの拡張子を含めた文字列を指定するのがおすすめです。

ワイルドカード(*)の意味と使い方

ワイルドカードとして * は「任意の文字列」を意味します。

使い方としては下表の例のようにして、文字列をあいまいに指定することができます。

文字列パターン意味
*.*拡張子を問わずすべてのファイル
*.xlsx.xlsx 拡張子のファイルのみを対象とする
*.csv.csv 拡張子のファイルのみを対象とする

複数ファイルの選択

Application.GetOpenFilename メソッドを使って、複数のファイルを選択させることも可能です。

その場合、選択されたファイルは配列として返されます。

Sub SelectMultipleFiles()
    Dim filePaths As Variant
    Dim i As Integer

    filePaths = Application.GetOpenFilename("すべてのファイル (*.*),*.*", , "複数ファイルを選択", , True)

    If IsArray(filePaths) = True Then
        For i = LBound(filePaths) To UBound(filePaths)
            MsgBox "ファイル " & (i + 1) & ": " & filePaths(i)
        Next i
    Else
        MsgBox "ファイルが選択されませんでした。"
    End If
End Sub

コードの解説

  • MultiSelect オプションを True に設定することで複数のファイルを選択可能にしています。
  • 選択されたファイルパスは配列 filePaths に格納され、各ファイルのパスがループ内で処理されます。
  • IsArray関数がTrueを返す場合を、ユーザーがファイルを選択したと判定しています。

配列については下記記事で詳しく解説しています。

応用例:特定のフォルダを初期表示する

通常、Application.GetOpenFilename メソッドでユーザーに向けて初期表示されるフォルダは、ユーザーが最近表示していたフォルダが表示されます。

ある特定のフォルダを初期表示するように仕組み化しておく方が、ユーザーの手数が減り満足度の高いマクロになります。

下記はユーザーのデスクトップを初期表示する場合のコードです。

Sub SelectFileFromDesktop()
    Dim filePath As Variant
    Dim desktopPath As String

    desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    ChDir desktopPath

    filePath = Application.GetOpenFilename()

    If filePath = False Then
        MsgBox "ファイルが選択されませんでした。"
    Else
        MsgBox "選択されたファイル: " & filePath
    End If
End Sub

初期表示するフォルダをデスクトップではなく細かく設定したい場合は下記コードを参考にしてみてください。

Sub SelectFileFromAcrobatFolder()
    Dim filePath As Variant
    Dim folderPath As String

    folderPath = "C:\Users\Username"    '←初期表示したいディレクトリをここで指定する
    ChDir folderPath

    filePath = Application.GetOpenFilename("すべてのファイル (*.*), *.*", , "ユーザーフォルダから選択")

    If filePath = False Then
        MsgBox "ファイルが選択されませんでした。"
    Else
        MsgBox "選択されたファイル: " & filePath
    End If
End Sub

まとめ

  • Application.GetOpenFilename は、ユーザーにファイルを選択させる便利なメソッド
  • 引数をうまく活用することで、目的に応じた柔軟なファイル選択処理が可能
  • キャンセル時の処理、複数ファイル選択、初期フォルダの指定なども簡単に実装可能

実務でのファイル操作をよりスムーズにするために、ぜひこのメソッドを活用してください!

この記事を書いた人

うつ病により二度の休職を経験。
現在は自動車メーカー勤務で、開発業務改善に従事。
自身の経験を基にしたメンタル改善のための情報や、仕事を楽にするためのVBAのノウハウ発信をしています。