【VBA】ファイルを選択するダイアログを表示して、選択されたファイルパスを取得する

ファイルを選択するダイアログ」を
表示して…

ファイルを選択するダイアログ
ファイルを選択するダイアログ


選択されたファイルパスを
取得できます!

選択されたファイルパスを取得
選択されたファイルパスを取得


ダイアログで選択できるファイル
制限
することもできます!
※Excelファイルのみ選択できるようにする等。

この記事では
 ・Excelファイルのみ選択可能
 ・CSVファイルのみ選択可能
 ・全てのファイルを選択可能
なダイアログを表示する方法を記載します!

PR

Excelファイルのみ選択可能なダイアログ

ここでは例として
 ・*.xlsx (現在のエクセルの形式)
 ・*.xlsm(現在のエクセルマクロの形式)
 ・*.xls (古いのエクセルの形式)
Excelファイルのみ選択できるダイアログを表示させます。

Option Explicit

Sub sample()

    Dim filePath As Variant
    
    '最初に表示されるフォルダパスを指定するためにカレントディレクトリを移動
    ChDir "C:\Users\user\Desktop\temp"
    
    'ダイアログを表示し結果を取得
    filePath = Application.GetOpenFilename(FileFilter:="Excelブック(*.xlsx;*.xlsm;*.xls;),")

    '結果を確認
    If filePath = False Then
        MsgBox "キャンセルされました。"
        '処理終了
        Exit Sub
    Else
        MsgBox "選択されたファイルパスは" & vbLf & filePath & vbLf & "です。"
    End If
    
End Sub

「最初に表示されるフォルダパス」を指定するために、「ChDirステートメント」によりカレントディレクトリを移動します(8行目)。

「Applicationオブジェクト」の「GetOpenFilename」メソッドにより、ダイアログが表示されます(11行目)。
※「OK」ボタンがクリックされた場合、戻り値はVariant型の「ファイルパス」となります。
※「キャンセル」ボタンがクリックされた場合、戻り値は「FALSE」となります。

上記では
 ・「キャンセル」ボタンがクリックされた場合、
 ・後続の処理に進まないように処理を中断
しています。
※Exitステートメントにより中断しています。

「GetOpenFilename」メソッドのパラメーターに
 ・「Excelブック(.xlsx;.xlsm;*.xls;),」
を記載することで、Excelファイルのみ選択できるようにしています(11行目)。

「GetOpenFilename」メソッドと言うように、名前に「Open」とありますがファイルは開かれません


上記を実行すると、
 ・Excelファイルのみ選択できるダイアログを表示されて
 ・選択されたファイルパスを取得できる
ことを確認できます。

実行結果(Excelファイルのみ選択できるダイアログの表示)
実行結果(Excelファイルのみ選択できるダイアログの表示)
実行結果(現在のエクセルの形式のファイル名を取得)
実行結果(現在のエクセル形式のファイル名を取得)
実行結果(現在のエクセルマクロの形式のファイル名を取得)
実行結果(現在のエクセルマクロ形式のファイル名を取得)
実行結果(古いのエクセル形式のファイル名を取得)
実行結果(古いのエクセル形式のファイル名を取得)
PR

CSVファイルのみ選択可能なダイアログ

CSVファイルのみ選択できるダイアログを表示させます。

Option Explicit

Sub sample()

    Dim filePath As Variant
    
    '最初に表示されるフォルダパスを指定するためにカレントディレクトリを移動
    ChDir "C:\Users\user\Desktop\temp"
    
    'ダイアログを表示し結果を取得
    filePath = Application.GetOpenFilename(FileFilter:="csvファイル(*.csv;),")

    '結果を確認
    If filePath = False Then
        MsgBox "キャンセルされました。"
        '処理終了
        Exit Sub
    Else
        MsgBox "選択されたファイルパスは" & vbLf & filePath & vbLf & "です。"
    End If
    
End Sub

「GetOpenFilename」メソッドのパラメーターに
 ・「csvファイル(*.csv;),」
を記載することで、CSVファイルのみ選択できるようにしています(11行目)。


上記を実行すると、
 ・CSVファイルのみ選択できるダイアログを表示されて
 ・選択されたファイルパスを取得できる
ことを確認できます。

実行結果(CSVファイルのみ選択できるダイアログの表示)
実行結果(CSVファイルのみ選択できるダイアログの表示)
実行結果(CSVファイルのファイル名を取得)
実行結果(CSVファイルのファイル名を取得)
PR

全てのファイルを選択可能なダイアログ

全てのファイルを選択できるダイアログを表示させます。

Option Explicit

Sub sample()

    Dim filePath As Variant
    
    '最初に表示されるフォルダパスを指定するためにカレントディレクトリを移動
    ChDir "C:\Users\user\Desktop\temp"
    
    'ダイアログを表示し結果を取得
    filePath = Application.GetOpenFilename()

    '結果を確認
    If filePath = False Then
        MsgBox "キャンセルされました。"
        '処理終了
        Exit Sub
    Else
        MsgBox "選択されたファイルパスは" & vbLf & filePath & vbLf & "です。"
    End If
    
End Sub

「GetOpenFilename」メソッドにパラメーターを記載しないことで、全てのファイルを選択できるようにしています(11行目)。


上記を実行すると、
 ・全てのファイルを選択できるダイアログを表示されて
 ・選択されたファイルパスを取得できる
ことを確認できます。

実行結果(全てのファイルを選択できるダイアログの表示)
実行結果(全てのファイルを選択できるダイアログの表示)
実行結果(CSVのファイル名を取得)
実行結果(CSVのファイル名を取得)
PR

参考①

フォルダを選択するダイアログを表示することもできます。

詳細は以下の記事をご確認ください。

PR

参考②

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●ChDirステートメント


●「Applicationオブジェクト」の「GetOpenFilename」メソッド


●Exitステートメント