2010年6月6日日曜日

【Excel】Len関数(意味のない比較だったかもw)【VBA】

 100未満の数の抽出するにあたり、値そのものを見るのと、Len関数で桁数を見るのと、どっちが速いかと思って試してみたのですが…、

Public StartTime As Double
Public EndTime As Double

Sub TimerStart()
    StartTime = Timer
End Sub

Sub TimerStop()
    EndTime = Timer
    Debug.Print (EndTime - StartTime & " 秒")
End Sub

Sub xxx()
    Call TimerStart         '---- 測定開始
    For Each c In [a1:a50000]
        c.Value = Round(Rnd() * 1000)
    Next
    [a1:a50000].Copy [b1:b50000]
    Call TimerStop          '---- 約3.42秒
End Sub

Sub SampleA()
    Call TimerStart         '---- 測定開始
    For Each c In [a1:a50000]
        If c.Value < 100 Then
            c.Value = "100以下です"
        End If
    Next
    Call TimerStop          '---- 約1.33秒(注)
End Sub

Sub SampleB()
    Call TimerStart         '---- 測定開始
    For Each c In [b1:b50000]
        If Len(c.Value) < 3 Then
            c.Value = "100以下です"
        End If
    Next
    Call TimerStop          '---- 約1.4秒(注)
End Sub

'-- (注)処理速度は生成された乱数に応じて変わりうる

 …これはお題が悪かったかなぁ。(´・ω・`)
 一応、値そのものをみるSampleAの方が僅差で速いようです。
 どちらも整数値を見て条件分岐してる訳だから、差が出ないのは当然か。

 むしろ、50,000回呼び出されているにもかかわらず、処理速度を落とさないLen関数がすごいと言えるかも。

 次回は文字列の処理に対して、
「If s = "" Then」と
「If Len(s) = 0 Then」
の違いを比較してみようかな。

0 件のコメント:

コメントを投稿