Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2011, 16:10   #1
Ppaa
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 107
По умолчанию Как удалить все буквы их ячеек и оставить № телефонов.

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

Есть в Excel столбец содержащий текстовые комментарии во многих из которых есть сотовые телефоны в произвольном формате.
Идеально конечно было бы, если бы гуру подсказали бы способ (видимо, макрос) который мог бы оставить в ячейках только номера сотовых в формате +79011234567.
Вот тут есть тема с регулярным выражением, позволяющим проверить правильность сотового номера http://habrahabr.ru/blogs/regex/110731/

Но это наверное слишком нагло.
Поэтому подскажите пожалуйста, как удалить из ячеек все буквы?
Ppaa вне форума Ответить с цитированием
Старый 27.06.2011, 16:19   #2
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
Вопрос

Цитата:
Сообщение от Ppaa Посмотреть сообщение
Есть в Excel столбец содержащий текстовые комментарии
Столбец есть, только где он ?? Выложите здесь..
Djeki вне форума Ответить с цитированием
Старый 27.06.2011, 16:31   #3
Ppaa
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 107
По умолчанию

Там персональная информация - номера сотовых и т.д.
Ок, попутал все цифры в телефонах.
Вложения
Тип файла: zip test.zip (4.9 Кб, 39 просмотров)
Ppaa вне форума Ответить с цитированием
Старый 27.06.2011, 16:35   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Функция извлекает номер телефона,был бы пример файла,сделал бы в нем.
Закончился лимит на файлы
Код:
Function oNumbers(RNG As Range)
Dim RegEx As Object
Dim ssl As String
ssl = RNG.Value
Set RegEx = CreateObject("VBScript.RegExp")
    With RegEx
        .Global = True
        .Pattern = "((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}"
    If .test(ssl) = True Then
         Set RegM = .Execute(ssl)
      oNumbers = RegM(0).Value
      Set objRegEx = Nothing
  Exit Function
    End If
    End With
  oNumbers = ssl
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.06.2011, 16:57   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Юзаем кнопку
Вложения
Тип файла: rar test1.rar (13.5 Кб, 106 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.06.2011, 17:11   #6
Ppaa
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 107
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Юзаем кнопку
Спасибо! буду разбираться.
Ppaa вне форума Ответить с цитированием
Старый 28.06.2011, 17:00   #7
Ppaa
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 107
По умолчанию

Путем мучительных разборов я смог убрать все буквы и большинство ненужных символов. За исключением пожалуй перевода строки. А как можно убрать в колонке числа менее 10 символов и более 11?

Последний раз редактировалось Ppaa; 28.06.2011 в 17:05.
Ppaa вне форума Ответить с цитированием
Старый 28.06.2011, 17:39   #8
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

А если вот так:
Код:
Sub oNumbers2()
Dim x, y(), r, i&
x = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
ReDim y(1 To UBound(x), 1 To 1)
With CreateObject("VBScript.RegExp")
    .IgnoreCase = True
    .Global = True
    .Pattern = "[^0-9()]+" 'или так: .Pattern = "\D"
    For Each r In x
        If .Test(r) = True Then r = .Replace(r, "")
        If Len(r) = 10 Or Len(r) = 11 Then i = i + 1: y(i, 1) = r
    Next r
End With
If i <> 0 Then [b1].Resize(i).Value = y
End Sub

Последний раз редактировалось nilem; 28.06.2011 в 18:09. Причина: .Pattern = "\D" подсмотрел у Сергея :)
nilem вне форума Ответить с цитированием
Старый 28.06.2011, 17:44   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

пока писал,николай уже обогнал
Код:
Function Zifra(RNG As Range)
Dim RegEx As Object
Dim ssl As String
ssl = Replace(RNG.Text, vbTab, "")
Set RegEx = CreateObject("VBScript.RegExp")
    With RegEx
        .Global = True
        .Pattern = "\d"
        If .test(ssl) = True Then
         Set RegM = .Execute(ssl)
      For n = 0 To RegM.Count - 1
      If Len(RegM(n).Value) <> 10 Then
      ssl = Replace(ssl, RegM(n).Value, "")
        End If
     Next
      Zifra = ssl
      Set objRegEx = Nothing
  Exit Function
  
    End If
    End With
  Zifra = ssl
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 29.06.2011, 16:20   #10
Ppaa
Форумчанин
 
Регистрация: 20.12.2010
Сообщений: 107
По умолчанию

Спасибо! Ну и наверно последний вопрос. Как можно добавить перед 10 значными номерами, начинающимися с 9 , цифру 7, а в 11 значных номерах, начинающихся на 89, заменить 8 на 7.
Ppaa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оставить в переменной только латинские буквы Delphinchik PHP 2 31.03.2011 14:41
Как оставить только заливку ячеек? tns-ka Microsoft Office Excel 5 09.04.2010 06:59
не погу понять как удалить буквы из массссииива 7 Makee Общие вопросы C/C++ 3 08.03.2010 10:23
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47