Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Определение телефона, Регулярные выражения - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определение телефона, Регулярные выражения (Макросы/Sub)
Определение телефона, Регулярные выражения
emkub Дата: Понедельник, 16.04.2018, 01:14 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 128
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте!

Задался вопросом определения телефона/телефонов, написанных нестандартным способом, с использованием цифроподобных знаков и букв.
Знаю, что нужно использовать регулярные выражения. Но в них полный 0...
В приложенном файле пример такого номера. Его нужно привести в нормальный формат (заменить всё на цифры) и вынести в столбец "Е".

Буду благодарен за любую помощь, включая ссылку на Теорию, касательно этого вопроса.
К сообщению приложен файл: 6713927.xlsx(8.1 Kb)
 
Ответить
СообщениеЗдравствуйте!

Задался вопросом определения телефона/телефонов, написанных нестандартным способом, с использованием цифроподобных знаков и букв.
Знаю, что нужно использовать регулярные выражения. Но в них полный 0...
В приложенном файле пример такого номера. Его нужно привести в нормальный формат (заменить всё на цифры) и вынести в столбец "Е".

Буду благодарен за любую помощь, включая ссылку на Теорию, касательно этого вопроса.

Автор - emkub
Дата добавления - 16.04.2018 в 01:14
sboy Дата: Понедельник, 16.04.2018, 09:08 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1696
Репутация: 482 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Его нужно привести в нормальный формат

и как этот номер должен выглядеть нормально?
Цитата
О9В-ОЧЧ-З7-|5
 
Ответить
СообщениеДобрый день.
Его нужно привести в нормальный формат

и как этот номер должен выглядеть нормально?
Цитата
О9В-ОЧЧ-З7-|5

Автор - sboy
Дата добавления - 16.04.2018 в 09:08
StoTisteg Дата: Понедельник, 16.04.2018, 11:44 | Сообщение № 3
Группа: Авторы
Ранг: Ветеран
Сообщений: 570
Репутация: 47 ±
Замечаний: 0% ±

Excel 2010
Видимо, 098-044-37-15. ИМХО, регэкспы тут не помогут никак, нужна таблица соответствий.


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеВидимо, 098-044-37-15. ИМХО, регэкспы тут не помогут никак, нужна таблица соответствий.

Автор - StoTisteg
Дата добавления - 16.04.2018 в 11:44
emkub Дата: Понедельник, 16.04.2018, 19:10 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 128
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Понял.
Посмотрите пожалуйста, можно ли улучшить/оптимизировать мой код?
И помогите правильно написать For each. Это коды операторов, по которым должен осуществляться начальный поиск номера.
А полный текст макроса в прикреплённом файле.

[vba]
Код
For i = 1 To 100

'Dim lst As New List Of String From {"050", "066", "067", "068", "069", "071", "073", "091", "093", "095", "096", "097", "098", "099"}

' Iterate through the list.
'For Each item As String In lst
    
    If InStr(Cells(i, "m"), "09") > 0 Then
        For t = 3 To 20
            tel = Mid(Cells(i, "m"), InStr(Cells(i, "m"), "09"), t)
            tel = Replace(tel, " ", "", 1)
            tel = Replace(tel, "-", "", 1)
            tel = Replace(tel, "_", "", 1)
            tel = Replace(tel, "О", "0", 1)
            tel = Replace(tel, "I", "1", 1)
            tel = Replace(tel, "|", "1", 1)
            tel = Replace(tel, "З", "3", 1)
            tel = Replace(tel, "Ч", "4", 1)
            tel = Replace(tel, "б", "6", 1)
            tel = Replace(tel, "Б", "6", 1)
            tel = Replace(tel, "В", "8", 1)
            
            If Len(tel) = 10 Then GoTo 10
        Next
10
        Cells(i, "e") = "'" & tel
    End If
    
Next
[/vba]
К сообщению приложен файл: 4179309.xlsm(35.4 Kb)
 
Ответить
СообщениеПонял.
Посмотрите пожалуйста, можно ли улучшить/оптимизировать мой код?
И помогите правильно написать For each. Это коды операторов, по которым должен осуществляться начальный поиск номера.
А полный текст макроса в прикреплённом файле.

[vba]
Код
For i = 1 To 100

'Dim lst As New List Of String From {"050", "066", "067", "068", "069", "071", "073", "091", "093", "095", "096", "097", "098", "099"}

' Iterate through the list.
'For Each item As String In lst
    
    If InStr(Cells(i, "m"), "09") > 0 Then
        For t = 3 To 20
            tel = Mid(Cells(i, "m"), InStr(Cells(i, "m"), "09"), t)
            tel = Replace(tel, " ", "", 1)
            tel = Replace(tel, "-", "", 1)
            tel = Replace(tel, "_", "", 1)
            tel = Replace(tel, "О", "0", 1)
            tel = Replace(tel, "I", "1", 1)
            tel = Replace(tel, "|", "1", 1)
            tel = Replace(tel, "З", "3", 1)
            tel = Replace(tel, "Ч", "4", 1)
            tel = Replace(tel, "б", "6", 1)
            tel = Replace(tel, "Б", "6", 1)
            tel = Replace(tel, "В", "8", 1)
            
            If Len(tel) = 10 Then GoTo 10
        Next
10
        Cells(i, "e") = "'" & tel
    End If
    
Next
[/vba]

Автор - emkub
Дата добавления - 16.04.2018 в 19:10
InExSu Дата: Понедельник, 16.04.2018, 23:18 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 333
Репутация: 43 ±
Замечаний: 60% ±

Excel 2010
Привет!
помогите правильно написать For each

Например:
[vba]
Код
Option Explicit

Public Sub Проход()
  Dim Lst() As Variant, iLst As Long
  Lst = Array("050", "066", "067", "068", "069", "071", "073", "091", "093", "095", "096", "097", "098", "099")
  
  Dim rng As Range
  Set rng = Worksheets("Лист1").Columns("m:m")
  Set rng = rng.SpecialCells(Type:=xlCellTypeConstants)
  
  Dim eL As Range
  For Each eL In rng 'по ячейкам
    
    For iLst = LBound(Lst) To UBound(Lst) ' по массиву
      'Ваш код
    Next
  Next

End Sub
[/vba]
 
Ответить
СообщениеПривет!
помогите правильно написать For each

Например:
[vba]
Код
Option Explicit

Public Sub Проход()
  Dim Lst() As Variant, iLst As Long
  Lst = Array("050", "066", "067", "068", "069", "071", "073", "091", "093", "095", "096", "097", "098", "099")
  
  Dim rng As Range
  Set rng = Worksheets("Лист1").Columns("m:m")
  Set rng = rng.SpecialCells(Type:=xlCellTypeConstants)
  
  Dim eL As Range
  For Each eL In rng 'по ячейкам
    
    For iLst = LBound(Lst) To UBound(Lst) ' по массиву
      'Ваш код
    Next
  Next

End Sub
[/vba]

Автор - InExSu
Дата добавления - 16.04.2018 в 23:18
StoTisteg Дата: Вторник, 17.04.2018, 13:18 | Сообщение № 6
Группа: Авторы
Ранг: Ветеран
Сообщений: 570
Репутация: 47 ±
Замечаний: 0% ±

Excel 2010
 If Len(tel) = 10 Then GoTo 10

Это заставляет подносить руку к лицу и цитировать Тёму Лебедева... Exit For же...


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
Сообщение
 If Len(tel) = 10 Then GoTo 10

Это заставляет подносить руку к лицу и цитировать Тёму Лебедева... Exit For же...

Автор - StoTisteg
Дата добавления - 17.04.2018 в 13:18
StoTisteg Дата: Вторник, 17.04.2018, 14:14 | Сообщение № 7
Группа: Авторы
Ранг: Ветеран
Сообщений: 570
Репутация: 47 ±
Замечаний: 0% ±

Excel 2010
Кстати, забыли, что кириллические буквы могут графически совпадать с латинскими, а о тоже может изображать 0...


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
СообщениеКстати, забыли, что кириллические буквы могут графически совпадать с латинскими, а о тоже может изображать 0...

Автор - StoTisteg
Дата добавления - 17.04.2018 в 14:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определение телефона, Регулярные выражения (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!