'测试了10W条随机数,不带输出用时<0.4s
'"用正则来判断要简单且快得多",用正则估计也快不了多少的吧,,,
Option Explicit
Sub test()
Dim arr, i As Long, j As Long, tm As Single, mark As String
tm = Timer
mark = "0123456789"
arr = [a1].CurrentRegion.Resize(, 1).Value
ReDim brr(1 To UBound(arr, 1), 1 To 1) As String
For i = 1 To UBound(arr, 1)
For j = Len(arr(i, 1)) To 1 Step -1
If InStr(mark, Mid(arr(i, 1), j, 1)) = 0 Then
If Mid(arr(i, 1), j + 1, 1) = "0" Then j = j + 1
brr(i, 1) = left(arr(i, 1), j) & "," & Mid(arr(i, 1), j + 1)
Exit For
End If
Next
Next
Debug.Print Timer - tm
[c1].Resize(UBound(brr, 1)) = brr
Debug.Print Timer - tm
End Sub
Sub 随机字符串生成()
Dim arr(1 To 10 ^ 5, 1 To 1) As String, i As Long, t As String, j As Long
Randomize
For i = 1 To UBound(arr, 1)
If Rnd < 0.5 Then t = "0" Else t = vbNullString
For j = 1 To Int(Rnd * 10) + 1
t = Chr(Int(26 * Rnd) + 65) & t
Next
arr(i, 1) = t & (Int(Rnd * 100000) + 1)
Next
With [a:a]
.ClearContents
.Resize(UBound(arr, 1)) = arr
End With
End Sub |