LoginSignup
0
0

More than 1 year has passed since last update.

FileSystemObjectを使った、ワイルドカード指定のファイル存在チェック

Posted at

あるあるネタにも関わらず、ネットではあまりツッコんだ内容がなかったのでメモ。


  • 業務上、べらぼうに長いファイルパス(300バイト以上)を扱うため、ファイル存在チェックでVBAのDir関数は使えない:frowning2:
  • 一方、FileSysystemObject(以下FSO)のFileExistsメソッドでワイルドカードを指定するとエラーになり:cry:  ⇒FSOのGetFolderメソッドで、対象フォルダ中の全ファイル名を抜き出し、Likeでワイルドカードパターンと照合します。
Dim fso As Scripting.FileSysystemObject
Dim fil As Scripting.File
Dim 存在FLG As Boolean

Set fso = New Scripting.FileSystemObject
存在FLG = False
With fso
    For Each In .GetFolder(非常に長いパス).Files
        If fil.Name Like "テンプレートver*.xlsx" Then
            存在Flg = True
            Exit For
        End If
    Next fil
End With
If Not 存在FLG Then
    MsgBox "テンプレートファイルがありません。", vbExclamation
End If

この方法、感覚的?に「パフォーマンスが悪いのでは?」などど書いたサイトもあったけど、ホンマに?
というわけで実験。

チェック対象フォルダに
 テンプレートvea1.xlsx
 テンプレートvea2.xlsx
  ・・・
 テンプレートvea1000.xlsx
の要領で、ワイルドカード最後の1文字がマッチしない名前のファイルを1,000個作成。

上記 VBAを実行し、処理時間を計測。5回計測して、処理時間は0.27~0.29秒。実行画面でもほとんどストレスは感じず。
(Windows10 Pro/Intel Xeon6126 2.6GHz×2/8GB RAM(VDI環境))
存在チェックは、ほとんどの場合そのファイルが存在すること前提のチェックなわけで、だとすればもっと早く終わる(はず)。


まあ、そもそも1フォルダに1000個もファイル格納させてるようなケースは、人・機械いずれが使うにも問題が多いような:sweat_smile:
というわけで、普通に使う向きには、特にパフォーマンスの問題はないと思われます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0