Excel VBA で Globファイル指定 を 利用する 方法

0 件のコメント

今回は「ExcelVBA で使える Glob ユーテリティ」についてまとめます。

VBScriptにありそうでなかった Glob ユーテリティ を作成したので、その解説と使い方についてまとめておきます。 このクラスを利用すると、Glob形式で指定したフォルダ配下のファイルや特定文字列を含んだファイルの絶対パスの一覧を取得が簡単にできます。

Globとは

ファイル検索などで利用される、ワイルドカードなどを使ったファイル名の指定方法です。

拡張子が 「xlsx」であれば「*.xlsx」といった指定で検索できます。 任意の深さのフォルダであれば「**」を使います。例えば「C:¥¥testcase」配下にある任意深さの「xlsx」ファイルであれば「C:¥¥testcase¥**¥*.xlsx」のように指定します。

使い方

ここでは「利用までの準備」と「指定方法の例」の2つについて解説します。

利用までの準備

以下の手順に記載はありませんが、内部的に .NET Framework 3.5 を利用しています。 Windows 10 では標準で入っていないので .NET Framework 3.5 を有効にしてからご利用ください。

  1. 以下のリンクからクラスファイルをダウンロード

    GitHub - garafu/vb-glob

  2. VBAのエディタでインポート

  3. 任意の場所で利用

    Sub Main()
        Dim g, list, item
        Set g = New Glob
        Set list = g.Search("D:\Work\Projects\vbscript\**\[a-z]+\*.vbs")
        For Each item In list
            Debug.Print item
        Next
    End Sub
    

    Glob はクラスなので New して Set してください。 唯一利用できるメソッドが Search(path as string) です。 指定された Globパス に合致する絶対パス一覧を取得します。 戻り値は .NET Framework の ArrayList になっているため、Set で受け取ってください。

指定方法の例

以下には使いそうなGlob形式パス指定の具体例を載せます。

  • 「C:\testcase」直下にある「.xlsx」ファイルを探す

    C:\testcase\*.xlsx

  • 「C:\testcase」直下にある「.xlsx」ないし「.xls」ファイルを探す

    C:\testcase\*.xls(x)?

  • 「C:\testcase」配下にある「.xlsx」ないし「.xls」ファイルを再帰的に探す

    C:\testcase\**\*.xls(x)?

ソースコード

ソースコードは GitHub 上に公開しています。 何かあれば Issues へご連絡ください。

今回は Excel VBA で Globパス を利用するユーテリティについてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!