例えば,Book1というブックに,Testというプロシージャがある場合,このプロシージャを呼び出すには,
Call Test
または
Application.Run "Test"
とやればよい。
では,どちらの方法が速いか?
Sub Test()
' 中味はなし
End Sub
というテスト用コードを作成し,別のプロシージャから Test を呼び出してみたところ,
Call Test のほうが,Application.Run "Test" よりも約200倍速かった。
・・・とはいうものの,
1回あたりの呼び出し時間は Application.Run "Test" でも10ns(ナノ秒)オーダなので,
ループで何万回も使用するのでなければ,状況に応じて便利なほうを使えばよい。
Application.Runは,ほかのブックのプロシージャを参照設定なしで呼び出せるので便利。
しかも,Privateプロシージャさえも呼び出すことができる。
ただし,ほかのブックのプロシージャを参照設定してCallで呼び出す場合と,参照設定せずにApplication.Runで呼び出す場合とでは,速度差はさらに大きく,前者のほうが800倍速かった。
よく知られているように,あらかじめ参照設定(事前バインディング)したほうがよいということであろう。
確認環境
Excel 2013(64bit) + Windows 7 Professional(64bit)
Excel,VBAで手軽に解析・計算をやりたいのですが,演算精度や処理速度も気になるので,いろいろと試しています。その結果が自分のPCに散在していて収拾がつかないので,自分用の備忘録としてまとめています。 あくまでも自分用なので,誰にでもわかるかどうかは保証できません。悪しからずご了承ください。ご質問はコメント欄へどうぞ。
カテゴリ
Application.ScreenUpdatingプロパティ
(1)
AVERAGE関数
(1)
CalculateFullRebuildメソッド
(1)
DEVSQ関数
(2)
DoEvents関数
(1)
EnableCalculationプロパティ
(1)
Excel
(28)
Fortran
(1)
KURT関数
(1)
LOG10関数
(1)
MAX関数
(1)
MIN関数
(1)
MOD関数
(1)
NORMSINV関数
(1)
PERCENTILE関数
(1)
RAND関数
(3)
Runメソッド
(1)
SKEW関数
(1)
STDEV関数
(5)
SUMSQ関数
(1)
SUM関数
(1)
VAR関数
(4)
VBA
(5)
Waitメソッド
(1)
Windows 10
(1)
アロケーションユニットサイズ
(1)
グラフ
(1)
その他
(7)
処理性能
(9)
精度
(10)
統計関数
(7)
0 件のコメント:
コメントを投稿