Страницы: 1
RSS
Обработка городских сотовых телеф.номеров в федеральный формат
 
Есть изменяемый(пополняемый) список диапазонов телефонных номеров, и есть приписанные к этим диапазонам коды городов. Например диапазон: 2350000-2359999 код 8351 или диапазон 460000–479999 код 83519 или т.д.    
Нужен макрос, который бы находил в базе телефонов номера входящие в эти диапазоны и дописывал к ним принадлежащий им код. Причем в базе номера могут быть как в формате 2350000, так и 235-00-00 или 235 00 00, а результат должен получится такой 83512350000.  
Номера же в базе, не входящие в прописанные диапазоны, оставались без изменений или удалялись.  
 
Желательно, чтобы была возможность в САМОМ макросе пополнять список диапазонов и кодов к ним.
 
{quote}{login=dimas}{date=03.04.2010 10:08}{thema=Обработка городских сотовых телеф.номеров в федеральный формат}{post}Например диапазон: 2350000-2359999 код 8351 или диапазон 460000–479999 код 83519 или т.д.{/post}{/quote}  
Нужны диапазоны , иначе откуда макросу знать "или т.д.".  
Формулой (не VBA) принимается?
 
Макрос получится непростой...  
 
Особенно учитывая то, что надо обрабатывать строки типа этой: "89089080808 (моб), 245-35-35 (раб)"  
 
 
В примере вы преобразовали "357-47-47 дом, 2350506 сот." в "83512350506"  
Правильно я понял, что, если в строке найден хоть один номер, подлежащий обработке, то все остальные номера затираем?  
 
PS: Могу сделать за небольшое вознаграждение. Если устроит - обращайтесь в личку.
 
Поглядите на пример макроса в этом файле: http://excelvba.ru/XL_Files/Sample__03-04-2010__14-17-12.zip  
 
 
Вот весь код:  
 
Sub ОсновнойМакрос()  
   Dim cell As Range, ra As Range: Application.ScreenUpdating = False  
   Set ra = Range([A3], Range("A" & Rows.Count).End(xlUp))
   For Each cell In ra.Cells  
       cell = НовыйНомер(cell)  
   Next cell  
End Sub  
 
Function НовыйНомер(ByVal СтарыйНомер As String) As String  
   txt = Replace(СтарыйНомер, " ", ""): txt = Replace(txt, "-", ""): txt2 = ""  
   For i = 1 To Len(txt)  
       символ = Mid(txt, i, 1): If символ Like "#" Or символ = "," Then txt2 = txt2 & символ  
   Next i  
   ОбработаноНомеров = 0  
   For Each num In Split(txt2 & ",", ",")  
       num2 = НомерСКодом(num)  
       If num <> num2 Then ОбработаноНомеров = ОбработаноНомеров + 1: НовыйНомер = num2: Exit Function  
   Next num  
   НовыйНомер = txt    ' если ничего не нашли  
End Function  
 
 
Function НомерСКодом(ByVal НомерБезКода) As String  
   '2350000-2359999 код 8351, 460000–479999 код 83519  
   Select Case НомерБезКода  
       Case 2350000 To 2359999: code = 8351  
       Case 460000 To 479999: code = 83519  
           ' ....  
       Case Else: code = ""  
   End Select  
   НомерСКодом = code & НомерБезКода  
End Function
 
{quote}{login=vikttur}{date=03.04.2010 10:29}{thema=Re: Обработка городских сотовых телеф.номеров в федеральный формат}{post}{quote}{login=dimas}{date=03.04.2010 10:08}{thema=Обработка городских сотовых телеф.номеров в федеральный формат}{post}Например диапазон: 2350000-2359999 код 8351 или диапазон 460000–479999 код 83519 или т.д.{/post}{/quote}  
Нужны диапазоны , иначе откуда макросу знать "или т.д.".  
Формулой (не VBA) принимается?{/post}{/quote}  
 
Под " и т.д." я имел ввиду что можно будет войти в макрос и при необходимости дописать новые диапазоны номеров с кодами.
 
{quote}{login=EducatedFool}{date=03.04.2010 12:17}{thema=}{post}Поглядите на пример макроса в этом файле: http://excelvba.ru/XL_Files/Sample__03-04-2010__14-17-12.zip  
 
 
Вот весь код:  
..................  
{/quote}  
 
Да, вроде все так как задумывалось! Немного неудобно заходить постоянно в макрос и редактировать "Set ra = Range([A3]" если номера расположены в других столбцах.
Можете дописать в макрос строку, чтобы при старте команды появлялось окно с предложением ввести номер столбца, который требуется обработать?  
 
После теста на большой базе с разными номерами, отпишусь, как все работает.
 
> Можете дописать в макрос строку, чтобы при старте команды появлялось окно с предложением ввести номер столбца, который требуется обработать?  
 
Сделал проще - макрос обрабатывает тот столбец, ячейка в котором выделена на момент запуска макроса:  
http://excelvba.ru/XL_Files/Sample__03-04-2010__18-25-21.zip  
 
 
> После теста на большой базе с разными номерами, отпишусь, как все работает  
Да вряд ли всё будет нормально работать...  
Судя по примеру, номера могут быть записаны как угодно, а, значит, предложенный мной алгоритм придётся дорабатывать ещё не раз.  
Поэтому я и написал, что готов сделать макрос за вознаграждение, - переделок, как мне кажется, понадобится много.  
Особенно, если надо оставлять ВСЕ номера в строке, где найден хоть один номер, подлежащий обработке.
Страницы: 1
Читают тему
Наверх