Página 1 de 1

Extrair números de texto e listá-los

Enviado: 15 Abr 2020 às 16:29
por Daniellelopes
Boa tarde. Qual seria a fórmular para eu encontrar números em um texto e retorna-los como uma lista. :roll:

:arrow: Por exemplo: Tenho uma redação e nela existem no meio do texto números de tamanhas diversos e de extensão diversa, como 99998899, 87345 , 1118777 , etc.
Gostaria de saber uma formula para procurar todos números no texto e imprimi-los como uma lista. Podem me ajudar com isso? Grata!

Re: Extrair números de texto e listá-los

Enviado: 15 Abr 2020 às 16:31
por babdallas
Anexe uma pasta de trabalho do Excel com um exemplo, por favor. Coloque o resultado esperado.

Re: Extrair números de texto e listá-los

Enviado: 15 Abr 2020 às 17:18
por Daniellelopes
Aqui babdallas a planilha com o resultado esperado. Grata.

Re: Extrair números de texto e listá-los

Enviado: 15 Abr 2020 às 17:20
por Daniellelopes
babdallas escreveu:Anexe uma pasta de trabalho do Excel com um exemplo, por favor. Coloque o resultado esperado.
Aqui a planilha com o resultado esperado. Obrigada.

Re: Extrair números de texto e listá-los

Enviado: 16 Abr 2020 às 07:39
por babdallas
Usei PowerQuery. Só clicar em Atualizar Tudo. Com fórmula vai ficar complexo.

Re: Extrair números de texto e listá-los

Enviado: 16 Abr 2020 às 10:54
por Estevaoba
Encontrei esta UDF (GetNums) que extrai múltiplos grupos de números de uma célula, mas retorna todos juntos.
Código: Selecionar todos
Function GetNums(sInp As String) As String
    Dim i As Long
    
    For i = 1 To Len(sInp)
        Select Case Mid(sInp, i, 1)
            Case "0" To "9"
                GetNums = GetNums & Mid(sInp, i, 1)
        End Select
    Next i
End Function
Em sua planilha, tecle Alt+F11
Na nova janela, clique Inserir, Módulo e cole o código acima.
Salve como planilha habilitada para Macro.

Para separar em grupos de 8 dígitos, use esta fórmula:
Código: Selecionar todos
=SEERRO(EXT.TEXTO(GetNums(TEXTO!A$2);1+(LIN(Z1)-LIN(Z$1))*8;8);"")
Copie para baixo.

Favor conferir no anexo.

Good luck!

Re: Extrair números de texto e listá-los

Enviado: 16 Abr 2020 às 16:28
por Daniellelopes
babdallas escreveu:Usei PowerQuery. Só clicar em Atualizar Tudo. Com fórmula vai ficar complexo.


Muito obrigada. Éxiste a possibilidade de eu colocar uma senha nessa Power Query para que outras pessoas nao modifiquem? :D

Re: Extrair números de texto e listá-los

Enviado: 16 Abr 2020 às 16:32
por Daniellelopes
Estevão, essa planilha anexa elá esta funcionando ou preciso fazer algo? Não enendi direito :roll: ... Não domino muito o excel...
Grata


Estevaoba escreveu:Encontrei esta UDF (GetNums) que extrai múltiplos grupos de números de uma célula, mas retorna todos juntos.
Código: Selecionar todos
Function GetNums(sInp As String) As String
    Dim i As Long
    
    For i = 1 To Len(sInp)
        Select Case Mid(sInp, i, 1)
            Case "0" To "9"
                GetNums = GetNums & Mid(sInp, i, 1)
        End Select
    Next i
End Function
Em sua planilha, tecle Alt+F11
Na nova janela, clique Inserir, Módulo e cole o código acima.
Salve como planilha habilitada para Macro.

Para separar em grupos de 8 dígitos, use esta fórmula:
Código: Selecionar todos
=SEERRO(EXT.TEXTO(GetNums(TEXTO!A$2);1+(LIN(Z1)-LIN(Z$1))*8;8);"")
Copie para baixo.

Favor conferir no anexo.

Good luck!

Extrair números de texto e listá-los

Enviado: 16 Abr 2020 às 17:08
por Estevaoba
A planilha que postei está sim funcionando. Basta colocar o texto e os resultados aparecem na coluna B da aba NÚMEROS EXTRAÍDOS.
Coloquei as explicações para o caso de você precisar usar em outra planilha.

Ab.

Re: Extrair números de texto e listá-los

Enviado: 16 Abr 2020 às 17:25
por babdallas
Infelizmente ainda não é possível colocar senha no PowerQuery.

Re: Extrair números de texto e listá-los

Enviado: 17 Abr 2020 às 10:34
por Daniellelopes
Entendi. Mas pelo que testei, ele separa em pacote de numeros de 8 dígitos, não é? Isso funcionaria se eu fosse localizar números do mesmo tamanho, com protocolos ou documentos, :| mas a intenção é localizar telefone.
Neste caso, alguns são digitados com 11 digitos, outros com 9 , outros com 8 dígitos, entende? Creio que a lógica para essa situação seria localizar numerais e separá-los do texto pelo espaçamento.
Será que conseguimos sem powerquery? Porque preciso colocar uma senha para que meus colaboradores não desconfigure, e com power query não da para bloquear, né?
Desde já, muito obrigada. :)
Valeu parceiro!

Estevaoba escreveu:A planilha que postei está sim funcionando. Basta colocar o texto e os resultados aparecem na coluna B da aba NÚMEROS EXTRAÍDOS.
Coloquei as explicações para o caso de você precisar usar em outra planilha.

Ab.

Re: Extrair números de texto e listá-los

Enviado: 17 Abr 2020 às 10:36
por babdallas
Você pode proteger a pasta de trabalho (arquivo) ou a planilha (aba). Veja:

https://support.office.com/pt-br/articl ... 76f44cccc9

Re: Extrair números de texto e listá-los

Enviado: 17 Abr 2020 às 10:42
por babdallas
Talvez esta configuração no PowerQuery te ajude.

https://support.microsoft.com/pt-br/off ... t-br&ad=br

Extrair números de texto e listá-los

Enviado: 17 Abr 2020 às 11:59
por Estevaoba
Babdallas, você que é expert em VBA, veja por favor se há como editar a UDF no meu post #53779 para possibilitar extrair valores numéricos separados como a autora do tópico deseja.

Ab.

Re: Extrair números de texto e listá-los

Enviado: 17 Abr 2020 às 14:01
por babdallas
Fiz com VBA, mas não com UDF e sim com uma subrotina. Não consegui pensar em uma maneira de fazer isso com UDF.

Re: Extrair números de texto e listá-los

Enviado: 17 Abr 2020 às 14:56
por Estevaoba
Encontrei outra UDF que retorna os valores numéricos separados, aí é mais fácil separar em células.

Segue anexo.

Ab.

Re: Extrair números de texto e listá-los

Enviado: 17 Abr 2020 às 15:08
por babdallas
Consegui transformar em UDF, retornando uma matriz com os números. Depois basta usar SEERRO+ÌNDICE+LINS para retorna os valores.

Abaixo, seguem os códigos da subsrotina e depois da UDF.

Subrotina
Código: Selecionar todos
Public Sub GetNums(sInp As String, rngCelula As Range)
    Dim i                   As Long
    Dim lngCont             As Long
    Dim strStringAtual      As String
    Dim strStringPosterior  As String
    Dim dblNum()            As Double
    
    'Conta qtos n?meros possui
    For i = 1 To VBA.Len(sInp)
        strStringAtual = VBA.Mid(sInp, i, 1)
        If i < VBA.Len(sInp) Then strStringPosterior = VBA.Mid(sInp, i + 1, 1)
        
        Select Case strStringAtual
            Case "0" To "9"
                If Not VBA.IsNumeric(strStringPosterior) Then lngCont = lngCont + 1
        End Select
    Next i
    
    ReDim dblNum(1 To lngCont) As Double
    
    lngCont = 1
    'Obt?m os npumeros em uma matriz
    For i = 1 To VBA.Len(sInp)
        strStringAtual = VBA.Mid(sInp, i, 1)
        If i < VBA.Len(sInp) Then strStringPosterior = VBA.Mid(sInp, i + 1, 1)
        
        Select Case strStringAtual
            Case "0" To "9"
                dblNum(lngCont) = dblNum(lngCont) & CDbl(strStringAtual)
                If Not VBA.IsNumeric(strStringPosterior) Then
                    lngCont = lngCont + 1
                End If
        End Select
    Next i
    
    rngCelula.Resize(UBound(dblNum)).Value2 = Application.Transpose(dblNum)
End Sub

Public Sub Teste()
    GetNums sInp:=Planilha1.Range("A2").Value, rngCelula:=Planilha3.Range("B2")
End Sub

UDF
Código: Selecionar todos
Public Function GetNums_UDF(sInp As String) As Variant
    Dim i                   As Long
    Dim lngCont             As Long
    Dim strStringAtual      As String
    Dim strStringPosterior  As String
    Dim dblNum()            As Double
    
    'Conta qtos n?meros possui
    For i = 1 To VBA.Len(sInp)
        strStringAtual = VBA.Mid(sInp, i, 1)
        If i < VBA.Len(sInp) Then strStringPosterior = VBA.Mid(sInp, i + 1, 1)
        
        Select Case strStringAtual
            Case "0" To "9"
                If Not VBA.IsNumeric(strStringPosterior) Then lngCont = lngCont + 1
        End Select
    Next i
    
    ReDim dblNum(1 To lngCont) As Double
    
    lngCont = 1
    'Obt?m os npumeros em uma matriz
    For i = 1 To VBA.Len(sInp)
        strStringAtual = VBA.Mid(sInp, i, 1)
        If i < VBA.Len(sInp) Then strStringPosterior = VBA.Mid(sInp, i + 1, 1)
        
        Select Case strStringAtual
            Case "0" To "9"
                dblNum(lngCont) = dblNum(lngCont) & CDbl(strStringAtual)
                If Not VBA.IsNumeric(strStringPosterior) Then
                    lngCont = lngCont + 1
                End If
        End Select
    Next i
    
    GetNums_UDF = Application.Transpose(dblNum)
End Function