みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するのは、「Application.FileDialogオブジェクト」です。
インプットファイルやフォルダの選択で使用するオブジェクトです。
【目次】
それでは、始めましょう!
Application.FileDialogオブジェクトとは
対話的なマクロには、「ファイル(フォルダ)選択ダイアログを表示する」という機能を持たせることがあります。
マクロに毎回読み込ませるファイルやフォルダが同じとは限らないからです。
その場合に、インプットデータの選択をユーザーに委ねることになります。
Application.FileDialogオブジェクトは、ファイル(フォルダ)選択ダイアログを表示します。
ExcelVBAには他にも選択ダイアログを表示するコードがありますが、Application.FileDialogオブジェクトを覚えておくと「ファイル選択」「フォルダ選択」の両方に対応できるようになります。
このオブジェクトは複数のプロパティがあるのですが、本記事では使用頻度の高いものに絞って解説いたします。
Application.FileDialogオブジェクトの構文
まず、構文についてです。
ここでは「ファイル選択」「フォルダ選択」に絞って構文を紹介します。
構文① ファイル選択ダイアログをオブジェクト定義する
Set 変数 = Application.FileDialog(msoFileDialogFilePicker)
構文② フォルダ選択ダイアログをオブジェクト定義する
Set 変数 = Application.FileDialog(msoFileDialogFolderPicker)
次にプロパティです。
上記の構文だけでは、オブジェクトを定義しただけで、選択ダイアログは表示されません。
選択ダイアログには、以下のようなプロパティを設定できます。
Show ←選択ダイアログを表示する
AllowMultiSelect = True ←ファイルの複数選択を可能にする(ファイル選択ダイアログのみ)
AllowMultiSelect = False ←ファイルの複数選択を不可能にする(ファイル選択ダイアログのみ)
SelectedItems ←選択ダイアログで選択されたファイル(フォルダ)名を格納する
InitialFileName ←選択ダイアログで最初に表示するフォルダを指定する
選択ダイアログでファイルが選択された場合、「Show」にはTrueが、選択されなかった(キャンセルされた)場合にはFalseが記録されます。後述の使用例①~③では、「Show」をIf文に使って条件分岐させています。
「InitialFileName」は選択ダイアログの展開時に見えるフォルダを指定できますので、フォルダの移動に使う操作を省略することができます。
「AllowMultiSelect」にTrueを設定するとファイルを複数選択可能になります。
ファイルを複数選択した場合、「SelectedItems」にはファイルパスが複数格納されます。
これらを使ったソースコードは後述の使用例③で紹介しています。
ここに記載したプロパティは一部だけです。
他にもダイアログに表示するファイルを絞り込んだり、表示を変更したりといったプロパティがあります。
次項の使用例では、実際のコードを紹介します。
Application.FileDialogオブジェクトの使用例
使用例① フォルダ選択ダイアログを表示する
Sub ExcelVBA_010_Example1() 'フォルダ選択ダイアログを表示する Dim objFD Set objFD = Application.FileDialog(msoFileDialogFolderPicker) 'オブジェクトを定義 With objFD .InitialFileName = "C:\" 'ダイアログで表示する初期フォルダを指定 If .Show = True Then 'ダイアログ表示⇒OKボタンが押された場合 MsgBox "選択したフォルダ:" + .SelectedItems(1), vbInformation '選択したフォルダパスを表示 Else '選択がキャンセルされた場合 MsgBox "キャンセルされました", vbInformation 'メッセージ表示 End If End With End Sub
使用例② ファイル選択ダイアログを表示する
Sub ExcelVBA_010_Example2() 'ファイル選択ダイアログを表示する Dim objFD Set objFD = Application.FileDialog(msoFileDialogFilePicker) 'オブジェクトを定義 With objFD .AllowMultiSelect = False 'ファイルの複数選択を不可能にする .InitialFileName = "C:\" 'ダイアログで表示する初期フォルダを指定 If .Show = True Then 'ダイアログ表示⇒開くボタンが押された場合 MsgBox "選択したファイル:" + .SelectedItems(1), vbInformation '選択したファイルパスを表示 Else '選択がキャンセルされた場合 MsgBox "キャンセルされました", vbInformation 'メッセージ表示 End If End With End Sub
使用例③ ファイル選択ダイアログを表示する(複数選択可能)
「AllowMultiSelect」にTrueを設定すると、ファイルを複数選択可能になります。
ファイルを複数選択した場合、SelectedItemsプロパティにファイルパスが複数格納されます。
それらを参照する場合、For Each文を使用します。
Sub ExcelVBA_010_Example3() 'ファイル選択ダイアログを表示する(ファイル複数選択可能) Dim objFD Dim objItem Set objFD = Application.FileDialog(msoFileDialogFilePicker) 'オブジェクトを定義 With objFD .AllowMultiSelect = True 'ファイルの複数選択を可能にする .InitialFileName = "C:\" 'ダイアログで表示する初期フォルダを指定 If .Show = True Then 'ダイアログ表示⇒開くボタンが押された場合 For Each objItem In .SelectedItems MsgBox "選択したファイル:" + objItem, vbInformation '選択したファイルパスを表示 Next Else '選択がキャンセルされた場合 MsgBox "キャンセルされました", vbInformation 'メッセージ表示 End If End With End Sub
終わりに
以上、Application.FileDialogオブジェクトの解説でした。
今回はファイルのオープンはしませんでしたが、そちらは次回以降に解説するつもりです。
ファイルを開くにはファイルパスが必須ですので、まずはこのオブジェクトで選択ダイアログを表示して、ファイルパスを取得するところから始めてみてください。
それでは、また次回お会いしましょう!