В общем альтернатива быстрее, или я что-то намудрил... Функция:
Код
Function aReplace(txt, findSStr$, replSStr$, Optional iComp& = 0) As String
Dim a&, b&, c&, arr$(), x&, f&, r&: f = Len(findSStr): r = Len(replSStr)
If f = 0 Then Exit Function
b = 0: a = InStr(1, txt, findSStr, iComp): c = 1
Do While a: b = b + 1: z = a + f: a = InStr(z, txt, findSStr, iComp): Loop: x = b
If b = 0 Then Exit Function
If z <= Len(txt) Then b = b + 1
aReplace = Space$(Len(txt) + (x * (r - f))): ReDim arr(1 To b)
b = 0: z = 1: a = InStr(1, txt, findSStr, iComp)
Do While a
b = b + 1: arr(b) = Mid$(txt, z, a - z): z = a + f: a = InStr(z, txt, findSStr, iComp)
Loop
If Len(txt) >= z Then b = b + 1: arr(b) = Mid$(txt, z)
For a = 1 To UBound(arr)
Mid$(aReplace, c, Len(arr(a))) = arr(b): c = c + Len(arr(a))
If Len(aReplace) >= c Then Mid$(aReplace, c, r) = replSStr: c = c + r
Next
txt = b 'счётчик замен, только для теста функции
End Function
Тестер:
Скрытый текст
Код
Sub bbb()
Dim dt$, a&, b&, mm, tt#, x&, del$, ff, arr()
'------------------------
x = 1000000: del = " ": Randomize
For b = 100000 To x Step 100000
tt = Timer
ReDim arr(1 To b)
For a = 1 To b
TextGen arr(a), 5, 10
Next
mm = Join(arr, del)
tt = Timer - tt: Debug.Print "String generation time: " & Format(tt, "0.000") & " Words: " & UBound(arr)
ff = mm
tt = Timer
dt = aReplace(mm, del, "")
tt = Timer - tt: Debug.Print "aReplace - time: " & Format(tt, "0.000") & " String len: " & Len(dt) & " Replaced: " & mm
tt = Timer
dt = Replace(ff, del, "")
tt = Timer - tt: Debug.Print "Replace - time: " & Format(tt, "0.000") & " String len: " & Len(dt)
Next
End Sub
'---------- на этот раз скопировал полностью :) ---------
Function TextGen(tt, ByVal ss&, ByVal ll&)
Dim aa As Byte, x&, t$, arr() As Byte, a As Byte, c&
ReDim arr(1 To 4, 1 To 2)
arr(1, 1) = 65: arr(1, 2) = 25: arr(2, 1) = 97: arr(2, 2) = 25
arr(3, 1) = 192: arr(3, 2) = 31: arr(4, 1) = 224: arr(4, 2) = 31
If ll - ss > 0 Then c = ss + (Rnd * (ll - ss)) Else c = ll
t = Space(c)
For x = 1 To c
a = Rnd * 4
If a = 0 Then a = 1
aa = arr(a, 1) + (Rnd * arr(a, 2))
Mid$(t, x, 1) = Chr(aa)
Next
tt = t
End Function
Коллеги предлагаю самое быстрое решение для VBA(библиотека/надстройка). Быстрее стандартных в разы. Если есть интерес, можем протестировать на вашей строке.