VBA高速化検証:定数の型の違い 2011.09.21
定数とは固定されて変化しない数のことです。プログラムでは予め固定する値を指します。固定できる値は、変数の型と同様で数値、論理値、文字列などがあります。
コードの中で定まっている値に使用することで、保守しやすいプログラムになります。
そんな定数ですが、「定数の型ごとに変数に代入する速度が違うのか」「定数の使用・不使用で速度に差が出るのか」との疑問をもったため、今回『定数の型ごとの値代入速度』を検証しました。検証は数値、論理値、文字列のそれぞれのケースで行いました。尚、Excel2003と2007で検証を行っています。
定数の型ごとの値代入速度検証テスト
下の表とグラフは、私のパソコン※でスピード検証テストを行った結果です。
※Vista / intel Core2 Duo / Excel2003,2007
結果
数値
・Excel2003と2007では、Long型、Double型に差が出た
・Currency、Single、Double型定数からの代入は、他と比べ倍以上の差が出た
・Integer、Long型定数からの代入は、定数不使用の場合とほぼ同速であった
論理値
・Excel2003と2007では、Boolean型に差が出た
・論理値ではVariant型定数からの代入が高速であった
文字列
・Excel2003と2007では、2007の方が若干速い傾向にあった
・String型定数からの代入は、Variant型定数より高速であった
・String型定数からの代入は、定数不使用の場合とほぼ同速であった
結果から
定数を使用する方が高速だと思っていたので、不使用でも速さはほとんど変わらない事に驚きました。高速化という観点からは、数値ではInteger型の定数を極力使用、論理値ではBoolean型の定数は使用せず、Variant型の定数を使用、文字列では、String型定数の使用がポイントです。
基本的に定数使用・不使用ではほとんど差はないため、プログラム保守の点を考慮し、定数の積極的な使用を推奨します。
※今回のテストは私のパソコンのみの検証であり、どのような環境でも、同様の結果を保証するものではありません。
※Excelのバージョンで結果に違いが出る事が考えられます。
検証テストコードとファイル
●検証テストのコード [Code]
●Excel97-2010 ・・・[Test_File] 検証テストを行ったファイルです。