ファイルの操作方法を比較する結論ファイル情報の取得ではVBAの関数が高速、ファイルのコピーや削除などの操作ではWindowsAPIが高速であり、平均的にはFileSystemObjectのパフォーマンスが高い。VBAのコーディングに限らず、何かをやろうとしたとき、その方法がいくつもあると、いったいどれが一番良い方法か迷うこともしばしばです。方法によって優劣があったとしても、自分なりのスタイルを決めて、常にそれを基準にコーディングするようにすれば、それはそれでよいと思いますが、新しい関数やメソッドなどが出てくると、やはり一度は違いをチェックしてみたくなります。今回のテストも、Access2000から利用可能となった「FileSystemObject」の登場がその発端です。BasicなどのDOSの頃からあった(?)関数やステートメント、Windowsから始まったAPIに、さらにこのFileSystemObjectのプロパティやメソッドが仲間入りしたのです。APIを使うために、わざわざDeclareステートメントを使って関数の宣言を行うのも面倒ですし、FileSystemObjectの使い方を新たに覚えるのも面倒かもしれません。そもそも、VBA固有の関数が用意されているのですから、それを使えばいちばん簡単なのかもしれません。パフォーマンスとしての違いはどうなのか、やはり気になるところで、一度その確認をしてみたいと思います。テスト内容として、どのようなファイル操作を行うか、その手順を説明します。実際のテストでは、これらの操作を1つのプロシージャとして連続して実行します。Documents」フォルダにある「Test1.MDB」というファイルの更新日時を取得し、変数にセットします「Test1.MDB」のファイルサイズを取得し、変数にセットします「Test1.MDB」を「Test2.MDB」という名前でコピーします「Test2.MDB」を「Test3.MDB」を名前に変更します「Test3.MDB」を削除しますこれらの操作を行うため、それぞれの手段ごとに、次のような関数やステートメント、メソッドなどを使うこととします。DeleteFileメソッドテストコードは次のようなものです。APIを使うための宣言だけでかなりの量になってしまいましたが、実際に比較するのは、「TestVBA」「TestAPI」「TestFSO」の3つのプロシージャです。それぞれのプロシージャごとに実行して、その時間を測定しています。ファイル操作ですので、ディスクのキャッシュの影響も考えられます。そのため、事前にこれらのコードを一度走らせてから、実測を行うようにしました。手順1・2のファイル情報を取得する処理と、手順3・4・5のファイルを操作する処理の2ヵ所で時間測定を行っています。TestAPIプロシージャについては、エラー処理は省略してかなり簡単に書いてあります。これを応用して、他の何かのプログラムに使われる際には注意してください。Subテスト結果は次の通りです。時間の単位は"秒"です。5.00全体として顕著に感じられるのは、ファイル情報の取得ではVBAの関数・ステートメントが最も速く、ファイル操作では逆にそれが一番遅いということでしょう。ファイル操作の時間が大きいため、合計時間ではVBAの関数・ステートメントが一番遅いという結果になっています。WindowsAPIは、それとは逆に、ファイル情報の取得が遅く、ファイル操作が速いという結果になっています。OSに近い命令であるWindowsAPIは、命令の処理時間そのものはきっと速いものであろうと思います。結局はVBAから呼び出していますので、そのオーバーヘッド、あるいは呼び出したあとの日付変換処理などに余分な時間を取られていると考えられます。それは、ローカルファイル日付やシステムファイル日付への変換など、他の手段に比べて、コード量そのものが多いことからも想像できます。ファイル操作ではそのようなことはなく、関数を1つ呼び出すだけですので、実際にディスク操作が開始されるまでの時間はかなり速いものと考えられます。ファイル操作については、その命令の処理時間よりも、ディスク操作の時間、つまりディスクドライブというハードウェアの動作時間がそのほとんどを占めると考えていました。どんな方法でファイル操作を実行しても、ハードウェアは同じなので、この時間には大きな違いは出ないだろうと想定していました。この結果を見ると、命令の処理時間が意外と影響していることが分かります。WindowsAPIにはディスクの動作そのものを高速にする要因が何かあるのかもしれません。総合的に判断すると、ファイル情報の取得ではVBAの関数が高速、ファイルのコピーや削除などの操作ではWindowsAPIが高速であり、平均的にはFileSystemObjectのパフォーマンスが高い、ということになるでしょう。