ラピードアクト株式会社

技術記事:ExcelVBAで仕事を効率化しようVol.10

みなさん、こんにちは。
ITソリューション事業部の林です。

本記事では、ExcelVBAのテクニックを紹介・解説いたします。

今回紹介するのは、「Application.FileDialogオブジェクト」です。
インプットファイルやフォルダの選択で使用するオブジェクトです。

【目次】

  1. Application.FileDialogオブジェクトとは
  2. Application.FileDialogオブジェクトの構文
  3. Application.FileDialogオブジェクトの使用例
  4. 終わりに

それでは、始めましょう!

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オブジェクトの解説でした。
今回はファイルのオープンはしませんでしたが、そちらは次回以降に解説するつもりです。
ファイルを開くにはファイルパスが必須ですので、まずはこのオブジェクトで選択ダイアログを表示して、ファイルパスを取得するところから始めてみてください。

それでは、また次回お会いしましょう!