ファイルの存在チェック方法は2通り

VBAでファイル操作を行う際に、目的のファイルが既に存在するかをチェックしたいことがあります。

ファイルの存在チェックの方法として2通りあります。

1つはFileSystemObjectのFileExists関数を利用する方法。

もう1つはDir関数を利用する方法です。

なお、FileSystemObjectを使う場合はVBA画面のツールメニュー→参照設定で、Microsoft Scripting Runtimeにチェックを付ける必要があります。

FileExistsとDirのどちらを使ったらよいか

FileSystemObjectのFileExists関数とDir関数はいずれも一長一短があります。

単純にファイルの存在をチェックする場合はワイルドカードが指定できるDir関数を利用した方がよいです。

FileSystemObjectのFileExists関数はワイルドカードは指定できず固定ファイル名しか判定できません。

ファイル名の存在以外にもファイル関連の情報を調べる必要があるのであればFileSystemObjectを利用した方がよいでしょう。

拡張子の種類やタイムスタンプやファイルの属性などで処理の方法を変える必要がある場合などですね。

FileExistsとDirの処理速度の違い

処理速度についてですが、ファイルの存在チェックだけであれば、FileSystemObjectのFileExists関数とDir関数の処理速度はほぼ同じです。

もちろん大量のファイルを検索するような場合であれば速度差は出ますが、10万件程度であれば最近のPCであればいずれも数秒程度終わります。

ただし、FileSystemObjectの場合はCreateObjectの負荷が高い(処理が遅い)ため、CreateObjectとFileExistsをそれぞれ独立させる工夫が必要になります。

Dir関数のソースコード例

まず、Dir関数を利用する場合です。

利用例です。

 

FileSystemObjectのFileExistsのソースコード例

次に、FileSystemObjectのFileExists関数を利用する場合です。

CreateObjectを1度だけ処理するようにするために、呼び出し元でFileSystemObjectの変数を定義しています。

利用例です。

是非活用してください。