次の形式の文字列を
"G##"
整数に変換する次のコードがあります。##
Dim str As String
Dim int As Integer
str = "G14"
int = CInt(Right(str, Len(str) - 1))
しかし、これは大規模なデータベースで定期的に実行されます。
より効率的な代替手段があるかどうか疑問に思っています(特に最後の行に関して)?
次の形式の文字列を
"G##"
整数に変換する次のコードがあります。##
Dim str As String
Dim int As Integer
str = "G14"
int = CInt(Right(str, Len(str) - 1))
しかし、これは大規模なデータベースで定期的に実行されます。
より効率的な代替手段があるかどうか疑問に思っています(特に最後の行に関して)?
私のテストでは
Mid$(strTest, 1, 1) = "0"
lngTest = CLng(strTest)
を使用するよりも 30 ~ 40% 高速でした
CLng(Right$(strTest, Len(strTest) - 1))
これは、よりも大幅に高速でした
CLng(Right(strTest, Len(strTest) - 1))
Long
速度的に優れているので使用しましたInteger
複数の交換のRegExp
場合、 a が独自のものになる場合があります。オーバーヘッドが高すぎて、このサンプルでは正当化できません
テストコード
Sub Test()
Dim dbTime As Double
Dim strTest As String
Dim lngTest As Long
Dim lngCnt As Long
strTest = "G14"
dbTime = Timer
For lngCnt = 1 To 1000000
lngTest = CLng(Right$(strTest, Len(strTest) - 1))
Next lngCnt
Debug.Print Timer - dbTime
dbTime = Timer
For lngCnt = 1 To 1000000
lngTest = CLng(Right(strTest, Len(strTest) - 1))
Next lngCnt
Debug.Print Timer - dbTimer
dbTime = Timer
For lngCnt = 1 To 1000000
Mid$(strTest, 1, 1) = "0"
lngTest = CLng(strTest)
Next lngCnt
Debug.Print Timer - dbTime
End Sub
int = CInt(Mid$(str, 2)) に対してコードを 100,000,000 回繰り返してみましたが、Mid$ ステートメントはわずかに高速です (私のマシンでは 6 秒) が、それは多くの繰り返しでした。ただし、右の関数に$を追加すると、同じ速度で実行されました。string 関数を使用するRight$
と、バリアント バージョンよりも文字列用に最適化されますRight
。したがって、文字列最適化バージョン Right$ を使用する必要がある唯一の提案です。
Dim str As String
Dim int As Integer
str = "G14"
int = CInt(Right$(str, Len(str) - 1))