Я не формулист, я VBAшник, поэтому просто набросал на коленке макрос: [vba]
Код
Sub ReFormat()
Dim i As Long, j As Long
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row If Not IsNumeric(Cells(i, 1).Value) Then Cells(i, 1).Value = IIf(Left(Cells(i, 1).Value, 2) = "+7", Replace(Cells(i, 1).Value, "+7", "8", 1, 1, vbTextCompare), Cells(i, 1).Value) j = 2 Do Until IsNumeric(Cells(i, 1).Value) If Not IsNumeric(Mid(Cells(i, 1).Value, j, 1)) Then Cells(i, 1).Value = Replace(Cells(i, 1).Value, Mid(Cells(i, 1).Value, j, 1), "", 1, 1, vbTextCompare) Else j = j + 1 Loop End If Next i
End Sub
[/vba]
Я не формулист, я VBAшник, поэтому просто набросал на коленке макрос: [vba]
Код
Sub ReFormat()
Dim i As Long, j As Long
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row If Not IsNumeric(Cells(i, 1).Value) Then Cells(i, 1).Value = IIf(Left(Cells(i, 1).Value, 2) = "+7", Replace(Cells(i, 1).Value, "+7", "8", 1, 1, vbTextCompare), Cells(i, 1).Value) j = 2 Do Until IsNumeric(Cells(i, 1).Value) If Not IsNumeric(Mid(Cells(i, 1).Value, j, 1)) Then Cells(i, 1).Value = Replace(Cells(i, 1).Value, Mid(Cells(i, 1).Value, j, 1), "", 1, 1, vbTextCompare) Else j = j + 1 Loop End If Next i
Вариант пользовательской функцией (в телефонах +375, просто убирается "+") [vba]
Код
Function landon(t As String) With CreateObject("VBScript.RegExp"): .Global = True .Pattern = "\+7": t = .Replace(t, 8) .Pattern = "\+9": t = .Replace(t, 89) .Pattern = "\D": landon = .Replace(t, "") End With End Function
Вариант пользовательской функцией (в телефонах +375, просто убирается "+") [vba]
Код
Function landon(t As String) With CreateObject("VBScript.RegExp"): .Global = True .Pattern = "\+7": t = .Replace(t, 8) .Pattern = "\+9": t = .Replace(t, 89) .Pattern = "\D": landon = .Replace(t, "") End With End Function