2013年8月29日木曜日

ExcelのApplication.Runメソッドの速度

例えば,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)

0 件のコメント:

コメントを投稿