Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
  • Avatar do usuário
#53755
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!
#53757
Anexe uma pasta de trabalho do Excel com um exemplo, por favor. Coloque o resultado esperado.
#53764
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.
Você não está autorizado a ver ou baixar esse anexo.
#53773
Usei PowerQuery. Só clicar em Atualizar Tudo. Com fórmula vai ficar complexo.
Você não está autorizado a ver ou baixar esse anexo.
#53779
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!
Você não está autorizado a ver ou baixar esse anexo.
#53792
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
#53793
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!
Avatar do usuário
Por Estevaoba
Avatar
#53794
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.
#53795
Infelizmente ainda não é possível colocar senha no PowerQuery.
#53808
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.
Avatar do usuário
Por Estevaoba
Avatar
#53815
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.
#53823
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.
Você não está autorizado a ver ou baixar esse anexo.
#53830
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
Você não está autorizado a ver ou baixar esse anexo.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord