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 件のコメント:
コメントを投稿