パソコン・インターネット

2015年2月28日

Excel マクロ(VBA)のスピード測定

仕事上、エクセルを使う機会が非常に多い。
というかマニュアルとして残す以外はほとんどエクセルで済ましてしまう。
面倒な作業はマクロにして楽するくらいエクセルを使う。
もはや事務職に近い。エンジニア(笑)

マクロを使っていて疑問に思ったことがあった。
具体的には、Range("A1")とCells(1,1)はどちらが処理速度が速いのだろう?
あるいは、FileCopyとFSOを利用したCopyFileはどちらが処理速(略)

ネットで調べてみると親切なサイトが調べた結果からある程度推測できたものの、
それが正しいとは限らない。
なぜならパソコンの性能で速度が左右されるかもしれないからだ。

なので適当にマクロを組み立てて実験した。

<実験内容>

1.RangeとCellsについて
  (1)ランダムな値を適当なセルに打ち込む作業を10000回実施する。
  (2)上記(1)を10回繰り返して、かかった時間の平均値を求める。
  (3)RangeとCellsでどれだけ処理速度が違うのか調べる。
1.5.Application.ScreenUpdatingの有用性
  (1)Cellsの処理速度とCellsに描写OFFした時の処理速度を比べる。
  (2)処理速度の比較方法は上記1.を使用する。
2.FileCopyとCopyFileについて
  (1)適当なフォルダ内にTestX.txt(Xは任意の自然数)を1000ファイル作成する。
  (2)1000ファイルをコピーする処理を10回行ってかかった時間の平均値を求める。
  (3)FileCopyとCopyFileでどれだけ処理速度が違うのか調べる。

<結果>

Photo
……表が適当すぎる?
仕事で疲れてるから勘弁してくれ。

<考察>

1.について
・RangeよりCellsの方が若干(3.27%)速い。本当に若干レベル。
 多分体感じゃわからない。だから調べたんだけどね……
・会社のPCで試した時はどちらも平均4秒前後でやはりCellsの方が少し速かった。
 自分のPC(2011年購入)は化石だなと思った。

1.5.について
・段違いの速さだと知ってはいたが、88%も時間が短縮されるとは思わなかった。
 本番環境でこれを使わない手はない。まぁ散々使ってるんだけどね……
・会社のPCで試した時もやはり80%以上の時間短縮が確認できた。

2.について
・FileCopyよりもCopyFileの方が速い(37%)。
 正直想定外だった。
 「インスタンス作成」⇒「データ弄る」の過程を踏むFSOより
 ダイレクトにファイルを動かすFileCopyの方が速いのではないのか。
 もしそうなら、FSOの有効的な使い方はコピー⇒移動⇒削除のような
 一連の作業をする際に利用できるのではないか、と考えていた。
 ただ、今回の結果から考えると認識を変える必要があるかもしれない。
・会社のPCで試した時はFileCopyの方が速い(5%)。
 ひょっとするとPCの性能に大きく依存するのか?
 そうであるならあまり意味のない実験結果だ。


以上、終わり!
今度は変数について考えたいなあ。

その他のカテゴリー