/ / Extrai números de telefone dos comentários - excel, excel-vba, excel-fórmula, excel-2010, vba

Extrair números de telefone dos comentários - excel, excel-vba, excel-fórmula, excel-2010, vba

  • Eu tenho coluna com comentários (mais de 5000 casos).
  • Esses comentários têm texto, números, data, tudo.
  • Preciso tirar o número de telefone desses comentários.
  • Números de telefone estão em lugares aleatórios para cada comentário, então LEFT,MID ou RIGHT não funciona

O resultado mais próximo que cheguei é com a Kutools =EXTRAXTNUMBERS() ...... mas eu obtenho uma linha de números que inclui data, ID's, etc.

Preferiria uma fórmula. :)

Dois comentários de amostra abaixo, os números de telefone necessários estão em negrito

Quinta-feira, 2 de fevereiro de 2017 14:37 Hora Universal Coordenada .3868 67076939 , pers .pārv.Tatjana Chamar resultado escolhido: Noruna citā laikā - 2017-02-03 07:15 Quarta-feira, 8 de fevereiro de 2017 08:18 Hora Universal Coordenada .3868 nr.67074071-neeksistē, personāla daļas vad.Tatjana neatbild, arī nr.67076600 Valor da Chamada escolhido: Neceļ sexta-feira, 10 de fevereiro de 2017 7:15 Hora Universal Coordenada * .3868 *** piezv ap 13 Valor da chamada escolhido: Noruna citā laikā - 2017-02-10 11:15

Quinta-feira, 2 de fevereiro de 2017 11:15 Coordinated Universal Time 4213 zvanīt 66119908 Indicativo telefónico escolhido: Noruna citā laikā - 2017-02-07 09:00 Terça-feira, 14 de Fevereiro de 2017 12:59 Hora Universal Coordenada .4532 * anita @ dzintarniece @ rtp.lv Resultado da chamada escolhido: Pergunta turbinada

Respostas:

4 para resposta № 1

Este pequeno UDF () retornará todas as sub-cadeias numéricas de 8 dígitos em uma string:

Public Function PHNum(s As String) As String
Dim L As Long, i As Long, temp As String
Dim CH As String
L = Len(s)
temp = ""
PHNum = ""
For i = 1 To L
CH = Mid(s, i, 1)
If IsNumeric(CH) Then
temp = temp & CH
If Len(temp) = 8 Then
PHNum = PHNum & vbCrLf & temp
End If
Else
temp = ""
End If
Next i
End Function

insira a descrição da imagem aqui

Nota:

Para obter o formato empilhado na célula de saída, formate-o para embrulhar.


4 para resposta № 2

Solução Regexp

Essa UDF extrai para você os números de telefone de um texto, como uma matriz. Você pode eventualmente usar Join para transformá-lo em uma string csv ou colar o array em um intervalo de células.

Function extractPhones(s As String) As String()
Dim i As Long, matches, match, ret
With CreateObject("VBScript.Regexp")
.Global = True
.Pattern = "W[26]d{7}W"
Set matches = .Execute(s)
End With
ReDim ret(1 To matches.Count) As String
For Each match In matches
i = i + 1
ret(i) = Mid(match, 2, Len(match) - 2)
Next
extractPhones = ret
End Function

Ele usa uma expressão regular que corresponde ao número de telefone com essas especificações:

  • são exatamente 8 dígitos
  • começar por 6 ou 2
  • não são precedidos ou seguidos por uma letra alfanumérica, mas por espaços em branco ou caracteres de pontuação.

demonstração


1 para resposta № 3

Usando um UDF, você pode fazer isso usando o seguinte código:

Para usá-lo:

  1. pressione ALT + F11
  2. Inserir módulo
  3. Colar o código
  4. Na planilha do Excel, use esta fórmula =get_phone("CELL_WITH_NUMBER_HERE") para obter a primeira seqüência de 8 dígitos em sua célula.

Código:

Public Function get_phone(cell As Range)
Dim s As String
Dim i As Integer
Dim num
Dim counter As Integer

"get cell value
s = cell.Value

"set the counter
counter = 0
"loop through the entire string
For i = 1 To Len(s)
"check to see if the character is a numeric one
If IsNumeric(Mid(s, i, 1)) = True Then
"add it to the number
num = num + Mid(s, i, 1)
counter = counter + 1
"check if we"ve reached 8 digits
If counter = 8 Then
get_phone = num
Exit Function
End If
Else
"was not numeric so reset counter and answer
counter = 0
num = ""
End If
Next i
End Function

Exemplo de imagem:

insira a descrição da imagem aqui


1 para resposta № 4

Outro opção que retorna todas as correspondências para uma única célula

insira a descrição da imagem aqui

Vejo https://regex101.com/r/Hdv65h/1

Function StrPhone(strIn As String) As String
Dim objRegexp As Object
Set objRegexp = CreateObject("VBScript.Regexp")
With objRegexp
.Global = True
.Pattern = ".*?(d{8})|.*$"
StrPhone = Trim(.Replace(strIn, "$1 "))
End With
End Function

-1 para resposta № 5

Há um add-on no Excel que usei no passado para expressões regulares (http://seotoolsforexcel.com/regexpfind/). No seu caso, pode ser complicado, pois você não sabe quantas vezes um número de telefone aparecerá em seu celular. Para esses casos, sugiro que você use os scripts VBA que foram fornecidos por outros usuários.