1

次の形式の文字列を
"G##"整数に変換する次のコードがあります。##

Dim str As String
Dim int As Integer
str = "G14"
int = CInt(Right(str, Len(str) - 1))

しかし、これは大規模なデータベースで定期的に実行されます。

より効率的な代替手段があるかどうか疑問に思っています(特に最後の行に関して)?

4

2 に答える 2

2

私のテストでは

 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
于 2012-08-24T00:14:14.553 に答える
2

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))
于 2012-08-23T16:21:22.383 に答える