asbo Цитата: Ваш код работает в 3 (ТРИ!) раза медленне моего.
Вы, мягко говоря, ошибаетесь.
[more=Вот]Sub Ваш_код()
Dim i%, iB%, iE%
Dim sStr$(1 To 8)
sStr(1) = "Им'я: Вячеслав Телефон: 0979122381 "
sStr(2) = "раб. 587-72-43 ; (063)-266-68-00 "
sStr(3) = "Роман т.3837006 м.0935688864м.0964165605м.0994356448 "
sStr(4) = "Иван 0672992940 "
sStr(5) = "0677088425 Олег; 093-404-55-50 Оксана "
sStr(6) = "Вера Николаевна т.221-14-39, 0958723695, 0673079412. "
sStr(7) = "067 605 56 27 221 63 17 "
sStr(8) = "221 63 17 067 605 56 27 "
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim j As Integer
iTimer! = Timer
For j = 1 To 1000
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For i = 1 To 8
iB = fn_Pos(sStr(i), 1)
iE = fn_Pos(sStr(i), iB + 1)
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''
Next
MsgBox "Время выполнения макроса составило " & _
Timer - iTimer! & " сек.", vbExclamation, ""
End Sub
Function fn_Pos(pStr$, pBgn%) As Integer
Dim i%
Dim tAsc As Byte
Dim bSpc As Boolean
Dim sSym$
For i = pBgn To Len(pStr)
tAsc = Asc(Mid(pStr, i, 1))
Select Case pBgn
Case 1
If tAsc >= Asc(0) And tAsc <= Asc(9) Then Exit For
Case Else
Select Case tAsc
Case Asc(0), Asc(1), Asc(2), Asc(3), Asc(4), _
Asc(5), Asc(6), Asc(7), Asc(8), Asc(9), _
Asc("("), Asc(")"), Asc("-")
bSpc = False
Case Asc(" ")
If bSpc Then Exit For
bSpc = True
Case Else
Exit For
End Select
End Select
Next
fn_Pos = i + CInt(bSpc)
End Function[/more] Ваш код.
А [more=Вот]Sub Мой_код()
Dim i As Long, s As String, a(1 To 8), b(), x
Set x = CreateObject("VBScript.RegExp"): x.Global = True
a(1) = "Им'я: Вячеслав Телефон: 0979122381 "
a(2) = "раб. 587-72-43 ; (063)-266-68-00 "
a(3) = "Роман т.3837006 м.0935688864м.0964165605м.0994356448 "
a(4) = "Иван 0672992940 "
a(5) = "0677088425 Олег; 093-404-55-50 Оксана "
a(6) = "Вера Николаевна т.221-14-39, 0958723695, 0673079412. "
a(7) = "067 605 56 27 221 63 17 "
a(8) = "221 63 17 067 605 56 27 "
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim j As Integer
iTimer! = Timer
For j = 1 To 1000
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ReDim b(1 To UBound(a)): On Error Resume Next
For i = 1 To UBound(a, 1)
If a(i) <> "" Then
s = Trim(Replace(a(i), Chr(160), " ")): x.Pattern = "[^()0-9]"
b(i) = Replace(Split(Trim(x.Replace(s, " ")), " ")(0), " ", "")
End If
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''
Next
MsgBox "Время выполнения макроса составило " & _
Timer - iTimer! & " сек.", vbExclamation, ""
End Sub[/more] мой.
Из Вашего макроса удален вывод сообщений, а из моего - вывод на рабочий лист.
Почувствуйте разницу.