2009/05/12

And と Ifのネスト対決-VBA編

これはまぁ意外性はないんですけど、とりあえず測定だけはしておこうかと。

.Netだったら。VBではAndAlso、C#では&&とかが使えるんですけど、VBAでは使えませんものね。

というわけで、またの名を、And v.s AndAlso ってコトですかね?!これをVBAではAnd とIfのネスト構造で再現して対決します。

(1)If IsCheck(i) And IsCheck(i + 1) Then

(2)If IsCheck(i) Then if IsCheck(i + 1) Then

結果

(1):3436 ミリ秒
(2):2563 ミリ秒

※Access2003で実験

サンプルソース

フォームにtxtDATAという名前のテキストボックスを作って、そこにタイムを表示する。clsTimerMMクラスは「時間経過計測クラス‐VBA編」参照。

Dim ClsTimerMM As ClsTimerMM
Dim strTextMsg As String
'************************
Dim lngMax As Long
Dim i As Long
'************************
Set ClsTimerMM = New ClsTimerMM
lngMax = 10000000

'************************
ClsTimerMM.SetStartDate
For i = 0 To lngMax
    If IsCheck(i) And IsCheck(i + 1) Then
    End If
Next
strTextMsg = Left("If IsCheck(i) And IsCheck(i + 1) Then" & String(50, " "), 50) & ":" & ClsTimerMM.ElapsedTime & vbCrLf
'************************
ClsTimerMM.SetStartDate
For i = 0 To lngMax
    If IsCheck(i) Then
        If IsCheck(i + 1) Then
        End If
    End If
Next
strTextMsg = strTextMsg & Left("If IsCheck(i) Then If IsCheck(i + 1) Then" & String(50, " "), 50) & ":" & ClsTimerMM.ElapsedTime & vbCrLf
'************************

Me.txtDATA.Value = strTextMsg
Set ClsTimerMM = Nothing
Private Function IsCheck(ByVal intChk As Long) As Boolean
 IsCheck = (intChk Mod 2 = 0)
End Function

0 件のコメント: