Добрый день. Необходимо привести большое количество (более 30 тыс.) телефонных номеров к единому 10-значному формату. Пример в прилагаемом файле.
Добрый день. Необходимо привести большое количество (более 30 тыс.) телефонных номеров к единому 10-значному формату. Пример в прилагаемом файле.Garik007
Function tel$(t$) Dim txt$ With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\D" txt = .Replace(t, "") End With If Len(txt) < 7 Then tel = "неправильный номер" Else tel = "8495" & Right(txt, 7) End If End Function
[/vba] ну или её в макрос засунуть
можно UDF-кой [vba]
Код
Function tel$(t$) Dim txt$ With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\D" txt = .Replace(t, "") End With If Len(txt) < 7 Then tel = "неправильный номер" Else tel = "8495" & Right(txt, 7) End If End Function
Работает, спасибо, но сейчас вспомнил про номера мобильных телефонов. Если номер, например, 9031234567 то его нужно приводить к формату 89031234567, т.е. если в номере 9 или 10 цифр, то их нужно оставлять как есть.
Работает, спасибо, но сейчас вспомнил про номера мобильных телефонов. Если номер, например, 9031234567 то его нужно приводить к формату 89031234567, т.е. если в номере 9 или 10 цифр, то их нужно оставлять как есть.Garik007
Function tel$(t$) Dim txt$ With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\D" txt = .Replace(t, "") End With Select Case Len(txt) Case Is = 7: tel = "8495" & txt Case Is = 10: tel = 8 & txt Case Is = 11: tel = txt Case Else: tel = "неправильный номер" End Select End Function
[/vba] и макрос типа: [vba]
Код
Sub re_tel() Dim i% For i = 1 To [a1].End(xlDown).Row Cells(i, 2) = tel(Cells(i, 1)) Next End Sub
[/vba]
тогда так [vba]
Код
Function tel$(t$) Dim txt$ With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\D" txt = .Replace(t, "") End With Select Case Len(txt) Case Is = 7: tel = "8495" & txt Case Is = 10: tel = 8 & txt Case Is = 11: tel = txt Case Else: tel = "неправильный номер" End Select End Function
[/vba] и макрос типа: [vba]
Код
Sub re_tel() Dim i% For i = 1 To [a1].End(xlDown).Row Cells(i, 2) = tel(Cells(i, 1)) Next End Sub
buchlotnik, спасибо большое, все работает как нужно, хотя мне больше по вкусу формулами. _Boroda_, спасибо большое за формулу, жалко что не совсем универсальная, т.к. в исходном номере может быть любое количество букв, русских или английских, а не только "моб.".
buchlotnik, спасибо большое, все работает как нужно, хотя мне больше по вкусу формулами. _Boroda_, спасибо большое за формулу, жалко что не совсем универсальная, т.к. в исходном номере может быть любое количество букв, русских или английских, а не только "моб.".Garik007
Сообщение отредактировал Garik007 - Среда, 04.05.2016, 12:29
buchlotnik, почему то когда меняешь количество СТРОКА($A$1:$A$25);1);СТРОКА($A$1:$A$25), например на СТРОКА($A$1:$A$2500);1);СТРОКА($A$1:$A$2500), формула не убирает буквы из номеров. [moder]
А количество ЧЕГО Вы меняете? И зачем?[/moder] AlexM, к сожалению не учитываются мобильные телефоны, везде единый формат 8495.
Пока что макросом получилось лучше формул, всем огромное спасибо.
P.S. При обработке файлов выяснилось что в некоторых ячейках указано больше одного номера, причем номера идут как через пробел, так и через другие символы, но это уже отдельный разговор с теми кто делал этот телефонный список.
buchlotnik, почему то когда меняешь количество СТРОКА($A$1:$A$25);1);СТРОКА($A$1:$A$25), например на СТРОКА($A$1:$A$2500);1);СТРОКА($A$1:$A$2500), формула не убирает буквы из номеров. [moder]
А количество ЧЕГО Вы меняете? И зачем?[/moder] AlexM, к сожалению не учитываются мобильные телефоны, везде единый формат 8495.
Пока что макросом получилось лучше формул, всем огромное спасибо.
P.S. При обработке файлов выяснилось что в некоторых ячейках указано больше одного номера, причем номера идут как через пробел, так и через другие символы, но это уже отдельный разговор с теми кто делал этот телефонный список.Garik007
Не разобрался, думал что должен быть выделен весь диапазон в котором имеются номера. buchlotnik, пример некорректных результатов выделен цветом.Garik007
buchlotnik, пример, когда в ячейке указано несколько номеров. В ячейке А4, когда указывали второй номер, видимо указали его через пробел и он преобразовался в числовой формат со всеми вытекающими.
buchlotnik, пример, когда в ячейке указано несколько номеров. В ячейке А4, когда указывали второй номер, видимо указали его через пробел и он преобразовался в числовой формат со всеми вытекающими.Garik007
Garik007, Всё работает. В C14 Вы не поставили квадратные скобки массива в конце и в начале., а в C17:C23 Вы не сменили формат ячейки. Протащите C13 вниз и будет Вам счастье. [moder]Фигурные?
Garik007, Всё работает. В C14 Вы не поставили квадратные скобки массива в конце и в начале., а в C17:C23 Вы не сменили формат ячейки. Протащите C13 вниз и будет Вам счастье. [moder]Фигурные?DrMini
Сообщение отредактировал _Boroda_ - Среда, 04.05.2016, 20:42