VBA高速化検証:Empty値の判定方法 2011.09.21
「Variant型の変数がEmpty値かどうか」の判定は、拙「ナンプレ無双」の多くの場面で使用しました。その際「If varI = Empty Then」とIsEmpty関数を使用した「If IsEmpty(varI) Then」の、2つの方法のどちらが高速か、検証を行いました。
また、セル値がEmpty値かどうかの判定方法の速度比較も併せて行いました。
Empty値の判定に関する速度比較
下の表とグラフは、私のパソコン※でスピード検証テストを行った結果です。
※Vista / intel Core2 Duo / Excel2003,2007
結果
Variant型変数の判定
・Excel2003と2007では、ほぼ同様の結果であった
・IsEmpty関数を使用した方が、約3分の2の時間で処理を終えた
セル値の判定】
・Excel2003の方が、5ポイント程高速であった
・IsEmpty関数を使用しても、処理速度はほぼ同様の結果であった
・セルの参照には非常に時間がかかった
結果から
Variant型変数のEmpty値の判定には、IsEmpty関数の使用は必須です。セル値の判定では、IsEmpty関数を使用しても高速化の効果は見られませんが、普段からEmpty値の判定にはIsEmpty関数を使用する癖をつけると良いでしょう。
また、セル値を調べる際は、Variant型変数にセル範囲の値を格納し、Variant型変数を参照する方法は必須です。(下に補足検証「セル範囲の値をVariant型変数に格納してのEmpty値の判定」を載せました)
※今回のテストは私のパソコンのみの検証であり、どのような環境でも、同様の結果を保証するものではありません。
※Excelのバージョンで結果に違いが出る事が考えられます。
検証テストコードとファイル
●検証テストのコード [Code]
●Excel97-2010 [Test_File] 検証テストを行ったファイルです。
セル範囲の値をVariant型変数に格納してのEmpty値の判定
セル範囲の値をVariant型変数に格納して、そのVariant型変数を参照し、Empty値の判定を行いました。尚、比較対象は、先の検証の【セル値の判定】です。
結果
・Excel2003の方が、若干高速であった
・Variant型の変数に格納した方が、約25倍高速であった