Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Приведение списка номеров телефонов в единый формат
 
Добрый день! Полдня провел в поиске, нашел несколько хороших решений, но не нашел универсального.

Есть много файлов с номерами телефонов. Телефоны заполняли разные люди в разных магазинах. И заполняли кто как может, естественно.
Нужно привести хотя бы номера телефонов в единый формат для дальнейшей интеграции с базой данных. Есть пропущенные номера - такие контакты можно просто удалить. Способы написания номеров телефонов очень разные, используются слеш, скобки, дефисы, точки, пробелы... ужас, в общем.

Прилагаю файл с примерным видом разных номеров телефонов, как их вводили операторы-продавцы. На самом деле вариантов даже больше, все трудно учесть, так как файлов пару сотен.. В каждом по несколько сотен контактов.

Правильный и нужный вариант номера телефона: +998912345678
первые 5 символов должны быть обязательно именно такие: +9989 - а далее последние 8 символов. (+998 - код страны, далее 9X - код оператора, и далее 7 цифр телефона)

Какие регулярные выражения можно использовать или как внедрить нужный макрос? Заранее спасибо большое!!!
 
Код
Sub ViewPhone()
Dim lstr&, i&
With Columns("C:C")
    .NumberFormat = "@"
    .Replace What:="+", Replacement:=""
    .Replace What:="-", Replacement:=""
    .Replace What:="/", Replacement:=""
    .Replace What:=".", Replacement:=""
    .Replace What:=" ", Replacement:=""
End With
On Error Resume Next
Range([A2], [A2].End(xlDown)).Offset(, 2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
lstr = Cells(Rows.count, 1).End(xlUp).Row
Columns("D:D").NumberFormat = "@"
For i = 2 To lstr
    If Len(Cells(i, 3)) = 0 Then Rows(i).Delete
    If Left(Cells(i, 3), 4) = "9989" Then
        Cells(i, 4) = "+" & Cells(i, 3)
    Else
        Cells(i, 4) = "+9989" & Cells(i, 3)
    End If
Next
End Sub
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Спасибо! Только видимо где-то ошибка: неверный номер "998041845" должен быть преобразован в "+998998041845" (в нем пропущены первые три цифры "+998"), а макрос выводит как "+9989998041845", то есть добавляет четыре цифры. Я пытался изменить в коде макроса "9989" на "998" но получается еще хуже ((
Изменено: mazamat - 22 Фев 2017 16:29:03
 
Там же написано, что проверка идёт на 9989, а то о чём Вы говорите - лишь 998..
??
Цитата
mazamat написал:
+9989 - а дале
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Привет, Володь. Там еще и на длину номера надо проверять(в том числе и на полный,10 знаков). Может же и короткий номер начинаться с 9989 :)
Я сам - дурнее всякого примера! ...
 
Хорошо пойдём от обратного, будем забирать 7 символов справа.
Код
Sub ViewPhone()
Dim lstr&, i&
With Columns("C:C")
    .NumberFormat = "@"
    .Replace What:="+", Replacement:=""
    .Replace What:="-", Replacement:=""
    .Replace What:="/", Replacement:=""
    .Replace What:=".", Replacement:=""
    .Replace What:=" ", Replacement:=""
End With
On Error Resume Next
Range([A2], [A2].End(xlDown)).Offset(, 2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
lstr = Cells(Rows.count, 1).End(xlUp).Row
Columns("D:D").NumberFormat = "@"
For i = lstr To 2 Step -1
    If Len(Cells(i, 3)) = 0 Then Rows(i).Delete
    Cells(i, 4) = "+9989" & Right(Cells(i, 3), 7)
Next
End Sub
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Привет, Серёжа.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Спасибо огромное!

Сильно помогает, хотя все еще приходится "причесывать" списки.. Некоторые операторы додумались вставлять * перед плюсом, я попытался в вашем коде добавить строчку:
.Replace What:="*", Replacement:=""
и долго думал, почему это не работает )))
 
А так?
.Replace What:="~*", Replacement:=""
 
Почему не работает? ))
Код
Sub qqq()
Dim Stroka As String
Stroka = "*+7123456789"
    Stroka = Replace(Stroka, "*", "")
End Sub



Страницы: 1
Читают тему (гостей: 1)