VBA

【VBA】Application.FileDialogの使い方とダイアログを出現させてファイルパスを取得する関数

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。

VBAでダイアログを出現させて、ファイルを取得する関数を作りました。
Application.Dialogを使います。

Application.FileDialogとは

Application.FileDialog オブジェクトは、VBAを使用してダイアログボックスを表示し、ユーザーにファイルやフォルダの選択をさせるための機能を提供します。

以下に Application.FileDialog の基本的な使い方をまとめます。

Application.FileDialog オブジェクトを作成する

FileDialogはオブジェクト変数に格納させる方法です。
インスタンスを生成します。

Dim fileDialog As FileDialog
Set fileDialog = Application.FileDialog(dialogType)

引数は以下の通りです。

dialogType種類説明
msoFileDialogOpenファイルを開くファイルを選んで開く時に使います。
msoFileDialogSaveAs名前を付けて保存ファイルを保存する時に使います。ファイル名を指定することができます。
msoFileDialogFilePickerファイルを選ぶ特定の種類のファイルを選ぶ時に使います。
msoFileDialogFolderPickerフォルダを選ぶフォルダを選ぶ時に使います。指定したフォルダ内のファイルを選択することはできません。

これらのダイアログボックスを使って、ファイルの選択や保存、フォルダの選択などを実現することができます。

試しに使ってみます。
ダイアログを出現させるためには「fileDialog.Show」で、
Showメソッドを使用します。

Sub SelectFile()
    Dim fileDialog As fileDialog
    Dim filePath As String

    ' ファイル選択ダイアログボックスを作成
    Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)
    
    '選択したファイルのファイルパスを取得
    fileDialog.Show
    filePath = fileDialog.SelectedItems(1)
    Debug.Print fileDialog.SelectedItems(1)
    '>>C:\Users\ユーザー名\Documents\abountETF\ID_lists.xlsx
    
    Debug.Print fileDialog.SelectedItems.Parent.InitialFileName
    '>>C:\Users\ユーザー名\Documents\abountETF\
    
End Sub

私が別件で作っている株式投資用ページのETFのリストのファイルパスを取得できました。

fileDialogオブジェクトは

  • ファイルパス以外にも
    →「fileDialog.SelectedItems(1)
  • そのファイルが格納されているフォルダパス
    →「fileDialog.SelectedItems.Parent.InitialFileName
    も取得できる

ただしこのままではダイアログを「キャンセル」するとエラーを起こします。

ダイアログで「キャンセル」を押すとプログラムが止まってしまうので
しっかりしたエラー対策が必要です。

その前にエラー回避をするためにはダイアログボックスのプロパティの知識が必要なので、そこを見てみましょう。

ダイアログボックスのプロパティを設定する

fileDialog.Title = "ファイルを選択してください"
fileDialog.Filters.Clear
fileDialog.Filters.Add "テキストファイル", "*.txt"
fileDialog.InitialFileName = "C:\Documents"
プロパティ名説明
Titleダイアログボックスのタイトルを設定します。
AllowMultiSelect複数のファイルを選択できるようにするかどうかを設定します。
Filtersファイルのフィルターを設定します。特定の拡張子やファイルの種類だけを表示できます。
InitialFileNameダイアログボックスの初期表示として指定するファイルのパスやフォルダのパスを設定します。
InitialViewダイアログボックスの初期表示ビューを設定します。
ButtonNameダイアログボックスのボタンの表示名を設定します。
Showダイアログボックスを表示し、ユーザーの操作を待ちます。

ダイアログボックスを表示し、ユーザーの選択結果を処理する

If fileDialog.Show = -1 Then
    ' ユーザーがファイルを選択した場合の処理
    ' 選択されたファイルやフォルダの情報にアクセスする方法は後述します
Else
    ' ダイアログがキャンセルされた場合の処理
End If

Show メソッドはダイアログボックスを表示し、ユーザーが選択した場合は -1、キャンセルされた場合は 0 を返します。

ダイアログを出現させてファイルパスを取得する関数

Function GetExcelFilePath(initialFolder As String) As String
    Dim filePath As String
    Dim fileDialog As FileDialog
    
    ' ファイル選択ダイアログボックスを作成
    Set fileDialog = Application.FileDialog(msoFileDialogFilePicker)
    
    ' ダイアログボックスのタイトルを設定
    fileDialog.Title = "Excelファイルを選択してください"
    
    ' 初期表示フォルダの設定
    fileDialog.InitialFileName = initialFolder
    
    ' ファイルのフィルターを設定
    fileDialog.Filters.Clear
    fileDialog.Filters.Add "Excelファイル", "*.xlsx; *.xls; *.xlsm"
    
    ' ダイアログボックスを表示し、ファイルが選択された場合のみ処理を継続
    If fileDialog.Show = -1 Then
        ' 選択されたファイルのパスを取得
        filePath = fileDialog.SelectedItems(1)
    End If
    
    ' ダイアログボックスを破棄
    Set fileDialog = Nothing
    
    ' ファイルのパスを返す
    GetExcelFilePath = filePath
End Function