Страницы: 1
RSS
Вычленить 11-значные номера телефонов
 
Друзья, помогите понять как вычленить только 11 - значные номера телефонов?
 
Добрый день!
Решение с помощью PQ
 
Цитата
Anton555 написал:
PQ
спасибо, только хочу понять, как же это делать, нужно каждый день такую задачу выполнять
 
Anton555,  я б еще добавил удаление дубликатов.

maryar198309,  Формульный вариант будет очень тяжелый как для обработки, так и для понимания и именно из-за переменного числа номеров в исходной ячейке.
По вопросам из тем форума, личку не читаю.
 
maryar198309, макрос допустим?
Код
Sub qqq()
For r = 1 To 1000000
  v = Cells(r, 1)
  If v = "" Then Exit For
  d = 1
  For c = 1 To Len(v)
    If IsNumeric(Mid(v, c, 1)) Then
      n = n & Mid(v, c, 1)
    Else
      If Len(n) = 11 Then
        Cells(r, 1 + d) = n
        d = d + 1
      End If
      n = ""
    End If
  Next c
Next r
End Sub
 
пара ошибок 148 и 210 строка
Код
=ЛЕВБ(СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(ЕСЛИ(ЕЧИСЛО(-ПСТР($A1;2;1));ПОДСТАВИТЬ($A1;"""";":");$A1);":";ПОВТОР(" ";99));99*СТОЛБЕЦ(A1);99));11)
Изменено: АlехМ - 10.11.2018 13:07:37
Алексей М.
 
спасибо, я только изучаю excel, макрос, конечно, вариант. Отлично работает. Но я пытаюсь понять как, с помощью функций это сделать.
 
Цитата
БМВ написал:
maryar198309 ,  Формульный вариант будет очень тяжелый...
Да, я уже поняла, а если предварительно разнести номера по столбцам?
 
Цитата
maryar198309 написал:
только хочу понять, как же это делать, нужно каждый день такую задачу выполнять
Правильный путь.
Владимир
 
Цитата
maryar198309 написал:
если предварительно разнести номера по столбцам?
то АlехМ,  показал как и где без предварительной обработки, а вот если надо было получить один столбец из ваших номеров, то там все сложнее, убрать дубли при этом  - еще сложнее.
Изменено: БМВ - 10.11.2018 14:32:37
По вопросам из тем форума, личку не читаю.
 
Вариант регулярками без удаления дублей. Результат во второй столбец.
Код
    Dim arr() As Variant
    Dim txt As String
    arr = Application.Transpose(Range("a1:a293"))
    txt = Join(arr)
    Erase arr
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "(\d){11}"
        If .test(txt) Then
            Set Matches = .Execute(txt)
            If Matches.Count > 1 Then
                ReDim arr(Matches.Count - 1)
                For i = 0 To Matches.Count - 1
                    arr(i) = Matches(i)
                Next
                ActiveSheet.Range("B1").Resize(Matches.Count, 1) = Application.Transpose(arr)
            End If
        End If
    End With
 
спасибо огромное, буду разбираться
 
вариант UDF в столбцах B C D
Код
Function bbb$(t$, i&)
 With CreateObject("VBScript.RegExp"): .Pattern = "\d{11}": .Global = True
        If .test(t) And .Execute(t).Count >= i Then bbb = .Execute(t)(i - 1)
 End With
End Function
Изменено: кузя1972 - 10.11.2018 18:14:48
Страницы: 1
Наверх