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編」参照。

  1. Dim ClsTimerMM As ClsTimerMM  
  2. Dim strTextMsg As String  
  3. '************************  
  4. Dim lngMax As Long  
  5. Dim i As Long  
  6. '************************  
  7. Set ClsTimerMM = New ClsTimerMM  
  8. lngMax = 10000000  
  9.   
  10. '************************  
  11. ClsTimerMM.SetStartDate  
  12. For i = 0 To lngMax  
  13.     If IsCheck(i) And IsCheck(i + 1) Then  
  14.     End If  
  15. Next  
  16. strTextMsg = Left("If IsCheck(i) And IsCheck(i + 1) Then" & String(50, " "), 50) & ":" & ClsTimerMM.ElapsedTime & vbCrLf  
  17. '************************  
  18. ClsTimerMM.SetStartDate  
  19. For i = 0 To lngMax  
  20.     If IsCheck(i) Then  
  21.         If IsCheck(i + 1) Then  
  22.         End If  
  23.     End If  
  24. Next  
  25. strTextMsg = strTextMsg & Left("If IsCheck(i) Then If IsCheck(i + 1) Then" & String(50, " "), 50) & ":" & ClsTimerMM.ElapsedTime & vbCrLf  
  26. '************************  
  27.   
  28. Me.txtDATA.Value = strTextMsg  
  29. Set ClsTimerMM = Nothing  
  1. Private Function IsCheck(ByVal intChk As LongAs Boolean  
  2.  IsCheck = (intChk Mod 2 = 0)  
  3. End Function  

0 件のコメント: