ExcelVBA:ダイアログによるファイルのパスの取得(GetOpenFilenameメソッドの場合)
ここでは「GetOpenFilenameメソッド」を使って、ダイアログを表示して、選択したファイルのパスを取得し、指定したセルに表示させる方法を説明していきます。
◆GetOpenFilenameメソッド
ダイアログボックスを表示して、選択したファイルのフルパスを返します。
1 2 3 |
'構文' Object.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect) '「Object」は「Applicationオブジェクト」で省略不可' |
◆CSVやExcelファイルのパスの取得方法(1ファイルのみ)
以下のようなExcelがあり、「パス取得」ボタンを押すと「A3」セルにパスを表示させたい場合の説明をしていきます。
◆CSVの場合
CSVの場合はVBAは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub CSVファイルのパス取得_Click() Dim CSVPath As String CSVPath = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "CSVファイルを選択してください", , False) '最後の「MultiSelect」をFalseにすることで単独ファイルの選択になります。何も書かない場合もデフォルトでFalseになります。' If CSVPath <> "False" Then Range("A3") = CSVPath 'A3セルに取得したパスを表示します。' End If End Sub |
◆Excelの場合
Excelの場合はVBAは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Excelファイルのパス取得_Click() Dim ExcelPath As String ExcelPath = Application.GetOpenFilename("Excelファイル(*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm", 1, "Excelファイルを選択してください", , False) '最後の「MultiSelect」をFalseにすることで単独ファイルの選択になります。何も書かない場合もデフォルトでFalseになります。' '他の拡張子のExcelを選択したい場合は、対象の拡張子を追加すればダイアログでに表示されます。' If ExcelPath <> "False" Then Range("A3") = ExcelPath 'A3セルに取得したパスを表示します。' End If End Sub |
◆CSVやExcelファイルのパスの取得方法(複数ファイルの場合)
複数ファイルを選択する場合は、構文の最後にある「MultiSelect」をTrueにすることで取得できます。
CSVとExcelの違いは拡張子部分になるので、Excelに関しては省略します。
◆CSVの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub 複数CSVファイルのパス取得_Click() Dim CSVPath As Variant '複数ファイルの場合は配列として保存されます' Dim i As Variant CSVPath = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "CSVファイルを選択してください", , True) '最後の「MultiSelect」をTrueにすることで複数ファイルの選択になります。' '複数CSVファイルのパスが取得できているかを以下で確認できます。' If IsArray(CSVPath) Then For Each i In CSVPath Debug.Print i Next Else Debug.Print CSVPath End If End Sub |