VBAで空文字("")をチェックするときの速度1千万回対決。とりあえず、Nullは空文字ではないので除外。
結果
strData = "あいうえおかきくけこさしすせそ" If strData = "" Then :517 ミリ秒 If Len(strData) = 0 Then :230 ミリ秒 If LenB(strData) = 0 Then :234 ミリ秒
strData = "0123456789abcdefg" If strData = "" Then :516 ミリ秒 If Len(strData) = 0 Then :270 ミリ秒 If LenB(strData) = 0 Then :234 ミリ秒
※LenとLenBの速度差は、なんだか色々フクザツです。
strDataに「あいうえお」等が入っていると、Len/LenBの速度差の順位は、状況によってはひっくりかえったりしてマチマチ。「0123abcd」などの文字列のときは、何度やってもにLenBが早くなります。何故かはいまのところ不明。
サンプルソース
フォームにtxtDATAという名前のテキストボックスを作って、そこにタイムを表示する。clsTimerMMクラスは「時間経過計測クラス‐VBA編」参照。
- Dim ClsTimerMM As ClsTimerMM
- Dim strTextMsg As String
- '************************
- Dim strData As String
- Dim strGet As String
- Dim lngMax As Long
- Dim i As Long
- '************************
- Set ClsTimerMM = New ClsTimerMM
- strData = "あいうえおかきくけこさしすせそ"
- 'strData = "0123456789abcdefg"
- strTextMsg = "strData:" & strData & vbCrLf
- lngMax = 10000000
- '************************
- ClsTimerMM.SetStartDate
- For i = 0 To lngMax
- If strData = "" Then
- End If
- Next
- strTextMsg = Left("If strData = """" Then" & String(30, " "), 30) & ":" & ClsTimerMM.ElapsedTime & vbCrLf
- '************************
- ClsTimerMM.SetStartDate
- For i = 0 To lngMax
- If Len(strData) = 0 Then
- End If
- Next
- strTextMsg = strTextMsg & Left("If Len(strData) = 0 Then" & String(30, " "), 30) & ":" & ClsTimerMM.ElapsedTime & vbCrLf
- '************************
- ClsTimerMM.SetStartDate
- For i = 0 To lngMax
- If LenB(strData) = 0 Then
- End If
- Next
- strTextMsg = strTextMsg & Left("If LenB(strData) = 0 Then" & String(30, " "), 30) & ":" & ClsTimerMM.ElapsedTime & vbCrLf
- '************************
- Me.txtDATA.Value = strTextMsg
- Set ClsTimerMM = Nothing
0 件のコメント:
コメントを投稿