性格悪い人が優勝

ワークシート上に多数のチェックボックスを設置し、
一括管理のために簡単なVBAを記述しました。

Sub チェックボックス一括TRUE()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
CheckBoxes.Value = True
.Calculation = xlCalculationAutomatic
End With
End Sub

これだと瞬間で処理が完了するのですが、当初は

.Calculation = xlCalculationManual
.Calculation = xlCalculationAutomatic

の二行をそれぞれ

EnableCalculation = False
EnableCalculation = True

としていて、これは相当遅くなります(後者が遅い)。
速度の違いから両社は明らかに異なる動作をしていると思いますが、
調べてはみたものの自分にはそれぞれの処理の意味がよく理解できていません。

どなたかご教授いただければ。

A 回答 (1件)

適当に回答します。



Application.Calculation
こちらはアプリケーション(Excel)そのものに適用されています。

EnableCalculation
こちらはワークシートに対して適用されています。(確かブックじゃなく指定したワークシートのみ)


なので、Sheet1の再計算を止めていてもSheet1の値を参照している別のシートがあれば
その分再計算されるので遅くなります。
同ウィンドウ内で別のブックを同時に開いていたりする場合も同様です。


アプリケーションに対して再計算を止めれば値の変更があっても他に一切影響しない為速いんです。
例えばマクロで
1.自動再計算をOFFにする
2.値を変更する(本来ならここで再計算される)
3.自動再計算をONにする
という処理を行うと、3が完了した時点では再計算されません。
VBAでいうイベントが発生して初めて再計算が実行されます、なので見た目にも速く感じるのです。
    • good
    • 0
この回答へのお礼

なるほど納得できました。
適当に回答、と仰っていましたが自分には必要十分なものでした。
ありがとうございました。

お礼日時:2014/03/27 00:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!