VBAでファイル選択ダイアログを表示して、ファイル名(ファイルのフルパス)を取得するには GetOpenFilename関数を利用します。
ファイル選択ダイアログ GetOpenFilename関数の構文
(構文)
Application.GetOpenFilename (FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
(参考)https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.getopenfilename
各パラメータの説明は下記の通りです。
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
FileFilter | オプション | Variant | ファイルの拡張子を指定する文字列を指定します。 csvファイルのみを対象とする例 “CSVファイル (*.csv),*.csv” |
FilterIndex | オプション | Variant | FileFilter で指定したファイル フィルター文字列の中で、1 から何番目の値を既定値とするかを指定します。 この引数を省略するか、ファイル フィルター文字列の数より大きい数値を指定すると、最初のファイル フィルター文字列が既定値となります。 |
Title | 省略可能 | Variant | ダイアログ ボックスのタイトルを指定します。省略した場合規定値の “ファイルを開く” が表示されます。 |
ButtonText | オプション | Variant | Macintosh でのみ指定できます。 |
MultiSelect | オプション | Variant | True を指定すると、複数のファイルを選択できます。 False を指定すると、1 つのファイルしか選択できません。 既定値は False です。 |
戻り値
戻り値はファイルが選択された場合は、選択されたファイルのフルパスが返却されます。
何も選択されずキャンセルされた場合はFalseが返却されます。
ファイル選択ダイアログ GetOpenFilename関数の使用例
ファイル選択ダイアログの使用例です。
1.GetOpenFilenameのパラメータに何も設定しない場合。
result = Application.GetOpenFilename()
この場合、全てのファイルが対象となり、タイトル等はデフォルトの設定値が利用されます。
2.選択できるファイルをcsvのみに限定する場合。タイトル等も設定。
result = Application.GetOpenFilename("Excel ファイル (*.csv),*.csv", , "CSVファイルを選択して下さい")
この場合、CSVファイルとフォルダのみが表示され、他の拡張子を持ったファイルは表示されなくなります。
3.複数ファイルを選択可能にする場合
複数ファイルを選択可能にする場合はMultiSelectパラメータに True を設定します。
Application.GetOpenFilename(, , , , True)
上記画像の様に複数のファイルが選択可能になります。
この場合、戻り値は各ファイルのフルパスが格納された配列になります。
4.複数種類の拡張子を持ったファイルを選択対象とする場合
FileFilterにカンマ区切りで連続して指定することで可能です。
Application.GetOpenFilename("CSV ファイル (*.csv),*.csv, Excel ファイル (*.xlsx),*.xlsx")
この場合、CSVファイルとExcelファイルが対象になりますが、右下のプルダウンが選択されている拡張子のみがファイル選択ダイアログ内に表示されます。
ファイル選択ダイアログ GetOpenFilename関数の使用例(応用編)
下記はGetOpenFilenameを利用して、選択されたファイルのフルパスをセルに表示する処理のサンプルコードです。
ここではファイルの拡張子を xlsx のエクセルファイルのみに限定しています。
Private Sub CommandButton1_Click()
Dim fType, prompt As String
Dim fPath As Variant
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
'選択できるファイルの種類をxlsxに限定
fType = "Excel ファイル (*.xlsx),*.xlsx"
'ダイアログのタイトルを指定
prompt = "Excelファイルを選択して下さい"
'ファイル参照ダイアログの表示
fPath = Application.GetOpenFilename(fType, , prompt)
If fPath = False Then
'ダイアログでキャンセルボタンが押された場合は処理を終了
End
End If
'B2セルにファイル名をセット
ws.Cells(2, 2).Value = fPath
End Sub
上記プログラムを利用してCドライブ直下にあるエクセルファイルを選択した結果は下記の通りです。
1.ファイル選択ダイアログ実行用にActiveXコントロールのボタンを利用した簡単なフォームを下記の様に作成。
2.ボタンクリックで表示されたファイル選択ダイアログでエクセルファイルを選択。
3.ファイル選択ダイアログで選択されたエクセルファイルがセルB2に表示される。
応用編は以上で完了です。
ファイル選択ダイアログは、CSVファイルを読み込んだり他のファイルのデータを処理する時など、様々な場面で利用できる便利な機能です。