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