Applicationメソッド Application.GetOpenFilename

Application

Application.GetOpenFilename は、VBA(Visual Basic for Applications)における Excelアプリケーションのメソッド のひとつで、ユーザーに ファイル選択ダイアログを表示し、その選択されたファイル名(パス)を取得するために使います。

ファイル自体は開かず、ファイルパスだけを取得するのが特徴です。選択したファイルを開くかどうかは、取得後に開発者が制御します。


🔷 基本構文

Application.GetOpenFilename( _
FileFilter, _
FilterIndex, _
Title, _
ButtonText, _
MultiSelect)

🔷 引数の詳細

引数名説明
FileFilterVariant表示するファイルの種類(拡張子)をフィルタ指定
FilterIndexVariant初期選択されるフィルタの番号(1から開始)
TitleVariantダイアログボックスのタイトルバーに表示されるテキスト
ButtonTextVariant(Mac専用)ボタンの表示名(Windowsでは無視される)
MultiSelectVariantTrue にすると複数ファイルの選択が可能(戻り値は配列)

🔷 戻り値

  • 通常:選択されたファイルの完全パス(文字列)
  • 複数選択:Variant型配列(最初の要素が False でなければ、選択されたファイルの一覧)
  • キャンセル時:False が返る

🔷 使用例①:単一ファイルの選択

Sub ファイルを選ぶ()
Dim ファイル名 As Variant
ファイル名 = Application.GetOpenFilename( _
FileFilter:="Excelファイル (*.xls; *.xlsx), *.xls; *.xlsx", _
Title:="ファイルを選択してください")

If ファイル名 <> False Then
MsgBox "選択されたファイル: " & ファイル名
Else
MsgBox "キャンセルされました"
End If
End Sub

この例では、Excelファイルだけが表示され、ユーザーがファイルを選択すればパスが取得されます。


🔷 使用例②:複数ファイルの選択

Sub 複数ファイル選択()
Dim ファイル名 As Variant
Dim i As Integer

ファイル名 = Application.GetOpenFilename( _
FileFilter:="すべてのファイル (*.*), *.*", _
Title:="複数ファイルを選択", _
MultiSelect:=True)

If IsArray(ファイル名) Then
For i = LBound(ファイル名) To UBound(ファイル名)
Debug.Print "選択ファイル: " & ファイル名(i)
Next i
ElseIf ファイル名 = False Then
MsgBox "選択されませんでした"
End If
End Sub

🔷 FileFilter の構文

textコピーする編集する"表示名, *.拡張子, 表示名2, *.拡張子2"

複数フィルターを定義可能(2つずつペア)

例:

FileFilter:="Excelブック (*.xlsx), *.xlsx, テキストファイル (*.txt), *.txt"

🔷 応用:ファイルを選んで開く

Sub ファイルを開く()
Dim パス As Variant
パス = Application.GetOpenFilename("Excelファイル (*.xlsx), *.xlsx")

If パス <> False Then
Workbooks.Open パス
End If
End Sub

🔷 よくある注意点

注意点内容
GetOpenFilenameファイルを開かない戻り値はあくまでパス。ファイルを開きたければ、別途 Workbooks.Open を使う必要あり。
キャンセル時は False を返すVariant 型にして False チェックが必要
複数選択時の戻り値は配列IsArray 関数で判定が必要

🔷 MacとWindowsの違い

  • Windows: ButtonText 引数は無視されます。
  • Mac: ButtonText でボタンの表示をカスタマイズ可能。

🔷 まとめ

項目内容
機能ファイル選択ダイアログを表示し、ファイルパスを取得する
開く処理自動で開かれない(手動で Workbooks.Open など使用)
戻り値ファイルパス(文字列)、または配列(MultiSelect=True)、または False
主な用途ユーザーにファイルを選ばせる。パス取得。

✅ よく使うテンプレート(シングル)

Dim f As Variant
f = Application.GetOpenFilename("すべてのファイル (*.*), *.*")
If f <> False Then
MsgBox "選んだファイル:" & f
End If
タイトルとURLをコピーしました