Application.GetOpenFilename
は、VBA(Visual Basic for Applications)における Excelアプリケーションのメソッド のひとつで、ユーザーに ファイル選択ダイアログを表示し、その選択されたファイル名(パス)を取得するために使います。
ファイル自体は開かず、ファイルパスだけを取得するのが特徴です。選択したファイルを開くかどうかは、取得後に開発者が制御します。
🔷 基本構文
Application.GetOpenFilename( _
FileFilter, _
FilterIndex, _
Title, _
ButtonText, _
MultiSelect)
🔷 引数の詳細
引数名 | 型 | 説明 |
---|---|---|
FileFilter | Variant | 表示するファイルの種類(拡張子)をフィルタ指定 |
FilterIndex | Variant | 初期選択されるフィルタの番号(1から開始) |
Title | Variant | ダイアログボックスのタイトルバーに表示されるテキスト |
ButtonText | Variant | (Mac専用)ボタンの表示名(Windowsでは無視される) |
MultiSelect | Variant | True にすると複数ファイルの選択が可能(戻り値は配列) |
🔷 戻り値
- 通常:選択されたファイルの完全パス(文字列)
- 複数選択: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