トップ > 玄人向け > VBA高速化検証:Calculationプロパティ

VBA高速化検証:Calculationプロパティ   2019.02.11

Application.Calculationは、ワークシートの数式の計算方法を設定するプロパティです。設定には「自動」「手動」「半自動」があり、「自動/半自動」に設定されていると、数式が参照しているセル値の変更に応じて自動で再計算が行われます。
「自動/半自動」だとマクロ実行の際に、数式の再計算処理が追加される可能性があるため、一般的にはマクロ実行時に数式の計算方法を「手動」にすることが、高速化につながると認識されています。

今回、以下のことに疑問をもったため、いくつかの検証を行いました。
・「手動」にするとどの程度高速化されるのか
・数式の参照元でないセルの値を変更する場合でも、「手動」だと高速化されるのか
・数式のないシートでも「手動」設定をした方がよいのか
・Calculationプロパティの設定にどの程度時間がかかるのか

「自動」「手動」/「参照元」「参照無し」

まず、「自動(Automatic)」と「手動(Manual)」で、それぞれ、数式の「参照元」「参照なし」を比較しました。どの場合も、単一セルに値を10000回設定し、その時間を計測しました。
尚、セル[B1]に「=A1」と数式を入力し、セル[A1]をセル[B1]の参照元としました。



この結果からわかることは
・「自動」かつ「参照元」だと、そうでない場合に比べ圧倒的に時間がかかる
・「自動」であっても「参照なし」の場合は、「手動」にした場合に近いパフォーマンスである
・「参照なし」の場合でも「自動」より「手動」の方が若干パフォーマンスが向上する

Calculationプロパティの設定

Calculationプロパティの設定にどの程度時間がかかるのか。プロパティ設定する場合とそうでない場合を比較しました。



この結果からわかることは
Calculationプロパティの設定はある程度時間がかかる。「手動(Manual)」+「自動(Automatic)」を1000回の実行にようした時間は、私の環境では0.856秒。つまり、「手動」+「自動」の設定の1回にかかる時間は、0.000856秒(0.856ミリ秒)。

数式のあるシートとないシート

数式のあるシートとないシートでは、パフォーマンスは変わるのか。「自動(Automatic)」と「手動(Manual)」、そして「数式ありシート」「数式なしシート(参照元でもない)」で比較を行いました。



この結果からわかることは
・シートに数式がない(参照元でもない)場合「自動」「手動」での違いは1ポイント
・シートの数式の有無にかかわらず「手動」のパフォーマンスはほぼ同等
・シートに数式がなくても「手動」にすると、若干パフォーマンスが向上

今回の検証からわかること

・数式の参照元のセル値を設定する場合、参照なしと比較し、4倍近く時間がかかる。
・数式の参照なしでも、計算方法が「自動」より「手動」の方が1~2ポイント高速。
・数式の有無、参照の有無にかかわらず「手動」の方が高速である。
・Calculationプロパティの「手動」+「自動」の設定1回にかかる時間は、私の環境で0.856ミリ秒(0.856秒÷1000)。
・数式の参照元の単一セルに値を設定する時間は、私の環境で0.0741ミリ秒(0.741秒÷10000)。
・数式の参照なしの単一セルに値を設定する時間は、私の環境で0.0178ミリ秒(0.178秒÷10000)。
・数式のないシートでの、「自動」と「手動」で、単一セルの値設定にかかる時間の差は、0.0009ミリ秒。

結論

・単純な数式の参照元になっている単一セルの場合、値を12回以上変更するのであれば、Calculationプロパティを「手動(Manual)」にした方がよい。複雑な数式や、他と連動する数式がからんでくる場合は、Calculationプロパティの「手動(Manual)」設定は必須。
・数式の参照元になっていない場合、また数式のない(参照元でもない)シートでは、ほとんどの場合Calculationプロパティを 「手動(Manual)」に設定する必要はない。

シートに値を設定する処理に比べ、Calculationプロパティの設定には時間がかかります。より高速化を目指すにはマクロの処理内容を鑑み、必要に応じてCalculationプロパティを設定することが大切です。

※今回のテストは私の端末のみの検証であり、どのような環境でも、同様の結果を保証するものではありません。
※Excelのバージョンで結果に違いが出る事が考えられます。


検証テストコードとファイル

●検証テストのコード [Code]
●Excel97-2010 [Test_File] 検証テストを行ったファイルです。


ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.