非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

VBA速度検証2 Applicationオブジェクトを使うとむちゃ遅くなる!

      2016/06/11

[ad#top-1]
 

VBAにApplicationオブジェクトという機能があって、これはExcelの関数が使える便利なオブジェクトなのです。

Application.Max
Application.Min
Application.Round

など。

便利は便利なのですが、この機能を使うと無茶苦茶遅くなるということを知っておきましょう。

検証のために次のようなマクロを作ってみました。最後にC3セルに処理時間が現れるようになっています。RoundUpというのは繰上げの関数です。

Sub 関数()
    time1 = Now()
    For i = 0 To 1000000
       a = Application.RoundUp(i * 1.1132, 0)
    Next i
    Range(“C3”) = Now() – time1
End Sub

 

次に、以下のマクロも処理時間を計測しました。RoundUp関数をマクロで自作したのがRoundUpFncです。

Sub 関数()
    time1 = Now()For i = 0 To 1000000
    a = RoundUpFnc(i * 1.1132, 0)
    Next i
    Range(“C3”) = Now() – time1
End Sub
Function RoundUpFnc(数値, 桁)
    result = 数値 * (10 ^ 桁)
    result = result + 0.999999999999999
    result = Int(result)
    resunt = result / (10 ^ 桁)
    RoundUpFnc = resunt
End Function

 

【結果】

Excel関数 自作関数
10秒 1秒

なんと、10倍もの差が出ています。

使い勝手がいいからって、安易にApplicationオブジェクトを使うもんじゃないですね!

 
[ad#ad-1]

スポンサーリンク

 - Excel, VBA