あるあるネタにも関わらず、ネットではあまりツッコんだ内容がなかったのでメモ。
- 業務上、べらぼうに長いファイルパス(300バイト以上)を扱うため、ファイル存在チェックでVBAのDir関数は使えない
- 一方、FileSysystemObject(以下FSO)のFileExistsメソッドでワイルドカードを指定するとエラーになり
⇒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個もファイル格納させてるようなケースは、人・機械いずれが使うにも問題が多いような
というわけで、普通に使う向きには、特にパフォーマンスの問題はないと思われます。