[ファイルを開く]ダイアログボックスを表示する(GetOpenFilenameメソッド)|Excel VBA |
GetOpenFilenameメソッドは、 [ファイルを開く]ダイアログボックスを表示し、ユーザーが選択したファイルのフルパスを返します。
ダイアログボックスにはカレントフォルダを表示します。
また、ファイルフィルタを使ってファイルの種類をフィルタすることができます。
構文 Object.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
設定項目 | 内容 |
---|---|
Object | Applicationオブジェクト [省略不可] |
FileFilter | ファイルの種類を指定する文字列(ファイルフィルタ文字列)を指定 [省略可能] 省略すると "すべてのファイル (*.*),*.*"になる |
FilterIndex | 引数FileFilterで指定したファイルフィルタ文字列の中で、何番目のフィルタを既定値とするかを指定 [省略可能] |
Title | ダイアログボックスのタイトルを指定 [省略可能] |
ButtonText | Macintoshのみ指定できる [省略可能] |
MultiSelect | 複数ファイルを選択できる(True)、1つのファイルしか選択できない(False:既定値) [省略可能] |
サンプル1では、ファイルの種類にcsvファイルを指定して、[ファイルを開く]ダイアログボックスを表示します。
ファイルを選択すると、そのファイルのフルパスがメッセージボックスに表示されます。
GetOpenFilenameメソッドの戻り値はバリアント型です。
ファイルを選択すると、そのパスを返すだけで、実際にファイルは開かれません。
[キャンセル]ボタンをクリックしたり、[×]ボタンでダイアログボックスを閉じるなど、ファイルの選択をキャンセルした場合はFalseを返します。
キャンセルされたかどうかはVarType関数で判定します。
Sub Sample1()
Dim myFile As Variant
ChDir "C:\Data"
myFile = Application.GetOpenFilename("CSVファイル(*.csv),*.csv")
If VarType(myFile) = vbBoolean Then
MsgBox "キャンセルされました"
Else
MsgBox myFile & " が選択されました"
End If
End Sub
引数FileFilterには、ファイルフィルタ文字列とワイルドカードをペアにして、「,(カンマ)」で区切りって指定します。ファイルの種類を複数指定する場合は、各ペアを「,」で区切って指定します。各ペアは、[ファイルの種類]ボックスのリストに表示されます。
ペアごとではなく、引数に指定する文字列全体を「"」で囲むことに注意してください。
例)CSVファイルとテキストファイルを指定
"CSV ファイル (*.csv),*.csv,テキストファイル (*.txt),*.txt"
1つのファイルフィルタ文字列に複数のワイルドカードを対応させるには、ワイルドカードを「;(セミコロン)」で区切って指定します。
例)Excelファイルに3種類のワイルドカードを対応させる
"Excel ファイル (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm"
複数ファイルを選択可能にするには、引数MultiSelectをTrueにします。
その場合、GetOpenFilenameメソッドは選択されたファイルのフルパスが入った配列を返します。
選択されたファイルが1つでも配列を返します。
ファイルが選択されたかどうかはIsArray関数で判定します。
サンプル2では、選択されたすべてのファイルのフルパスをイミディエイトウィンドウに出力します。キャンセルされた場合は「False」が出力されます。
Sub Sample2()
Dim myFile As Variant
Dim f As Variant
ChDir "C:\Data"
myFile = Application.GetOpenFilename( _
FileFilter:="Excel ファイル (*.xls; *.xlsx),*.xls; *.xlsx", _
MultiSelect:=True)
If IsArray(myFile) Then
For Each f In myFile
Debug.Print f
Next
Else
Debug.Print myFile
End If
End Sub