Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
Por MATOSANDREW 15 Set 2020 às 11:04
Membro Novato
Mensagens: 3
Reputação: 0
#58858
Bom dia, Amigos.

A solução que não encontro é de como concateno todos os lotes de uma mesma travessa numa única célula.
Fiz o resultado que espero na coluna amarela e o espaço para a fórmula na coluna verde.
Tenho uma base com mais de 2 mil logradouros

Alguem consegue me ensinar, por favor? :)
Apenas usuários registrados podem ver ou baixar anexos.
Por babdallas 15 Set 2020 às 12:24
Excel Expert
Mensagens: 3196
Reputação: 1384
#58863
No Office 365, temos a função CONCAT ou a UNIRTEXTO para fazer este trabalho. Caso não tenha o Office 365, utilize esta função (UDF_ feita em VBA pelo mestre Fernando Fernandes.

Código: Selecionar todos'====================================================================
'Nome.........: UnirTexto *(Criada e incluída no Excel 2016, mas ausente nas outras versões)
'Data.........: 29/03/2016 (dmy)
'Autor........: Fernando Fernandes
'Contato......: Fernando.Fernandes@outlook.com.br
'Descrição....: Concatena todos os textos informados no último parâmetro,
'               usando o delimitador para separá-los, ignorando ou não as células vazias
'Forum........: www.Planilhando.com.br
'====================================================================
Public Function UnirTexto(ByVal Delimitador As String, _
                          ByVal IgnorarVazios As Boolean, _
                          ParamArray Celulas() As Variant) As Variant
On Error GoTo TratarErro
Dim Intervalo   As Variant
Dim Resultado   As String
Dim i           As Long
Dim j           As Long
Dim k           As Long
   
    If UBound(Celulas, 1) < LBound(Celulas, 1) Then
        UnirTexto = VBA.Conversion.CVErr(xlErrValue)
        Exit Function
    End If
   
    For i = LBound(Celulas, 1) To UBound(Celulas, 1) Step 1

       If VBA.Information.IsArray(Celulas(i)) Then
       
            Intervalo = Celulas(i)
            For j = LBound(Intervalo, 1) To UBound(Intervalo, 1) Step 1
                For k = LBound(Intervalo, 2) To UBound(Intervalo, 2) Step 1
                    If Not VBA.Information.IsError(Intervalo(j, k)) Then
                        If Not VBA.Strings.Trim(Intervalo(j, k)) = vbNullString Then
                            Resultado = Resultado & Delimitador & Intervalo(j, k)
                        End If
                    End If
                Next k
               
            Next j
           
        Else
       
            If Not VBA.Information.IsError(Celulas(i)) Then
                If Not VBA.Strings.Trim(Celulas(i)) = vbNullString Then
                    Resultado = Resultado & Delimitador & Celulas(i)
                End If
            End If
           
        End If
       
    Next i

    If VBA.Strings.Len(Resultado) > VBA.Strings.Len(Delimitador) Then
        Resultado = VBA.Strings.Right(Resultado, VBA.Strings.Len(Resultado) - VBA.Strings.Len(Delimitador))
    End If
    UnirTexto = Resultado
    Exit Function
TratarErro:
    UnirTexto = VBA.Conversion.CVErr(xlErrValue)
End Function
Apenas usuários registrados podem ver ou baixar anexos.
Avatar do usuário
Por Deciog 15 Set 2020 às 12:29
Membro 5 Estrelas
Mensagens: 1547
Reputação: 823
#58864
MATOSANDREW , Boa Tarde

Você não informou a versão do se Excel fiz com formula para versão 21013 e superiores

Confere se é desta forma que desejas

Se minha resposta foi útil, clique em obrigado é uma forma de agradecimento da ajuda

Decio
Apenas usuários registrados podem ver ou baixar anexos.
Por babdallas 15 Set 2020 às 12:34
Excel Expert
Mensagens: 3196
Reputação: 1384
#58865