VBA – Concatenando Ranges (Função CONCATENAR)

Velha conhecida dos veteranos de Excel, a função CONCATENAR permite que você faça a união de textos em contidos em células. O único problema da função é que, quando se quer concatenar células que estejam na sequência, não é possível informar o Range.

Por exemplo, caso o texto que se deseja concatenar esteja entre A1 e A10, você precisará usar a função da seguinte maneira:

=CONCATENAR(A1;A2;A3;A4;A5;A6;A7;A8;A9;A10)

Não seria mais simples se isto pudesse ser feito?

=CONCATENAR(A1:A10)

Para isso, nada melhor que uma porção de código VBA. O pessoal do site Excel Tips publicou um código que possibilita exatamente isso. Duas Funções foram disponibilizadas, como mostra o código abaixo.

Function Concat1(myRange As Range, Optional myDelimiter As String)
    Dim r As Range
 
    Application.Volatile
    For Each r In myRange
        Concat1 = Concat1 & r & myDelimiter
    Next r
    If Len(myDelimiter) > 0 Then
        Concat1 = Left(Concat1, Len(Concat1) - Len(myDelimiter))
    End If
End Function
 
Function Concat2(myRange As Range, Optional myDelimiter As String)
    Dim r As Range
 
    Application.Volatile
    For Each r In myRange
        If Len(r.Text) > 0 Then
            Concat2 = Concat2 & r & myDelimiter
        End If
    Next r
    If Len(myDelimiter) > 0 Then
        Concat2 = Left(Concat2, Len(Concat2) - Len(myDelimiter))
    End If
End Function

Nas duas, há um segundo parâmetro, opcional, que é o delimitador, que é um texto que irá separar todas os textos contidos na célula do range informado. Uma mão na roda. A diferença está em que na primeira (Concat1), caso uma das células do range esteja vazia, ele vai repetir o delimitador. No caso da Concat2, o problema é tratado. A figura abaixo mostra o exemplo em ação.

Exemplo de uso das Funções de Concatenação de Ranges
Exemplo de uso das Funções de Concatenação de Ranges

Bom proveito!

Referências

http://excel.tips.net/Pages/T003062_Concatenating_Ranges_of_Cells.html

Comentários

comentários

3 comentários em “VBA – Concatenando Ranges (Função CONCATENAR)”

  1. Excelente postagem…

    Incrementaria o seguinte, na Funcação Concat2.

    Function Concat(myRange As Range, Optional myDelimiter As String)
    Dim r As Range
    Dim v As String

    Application.Volatile
    For Each r In myRange
    If Len(r.Text) > 0 Then
    If r.Text = v Then
    Continue For ‘ Dessa forma não haveria duplicidade
    End If

    Concat = Concat & r & myDelimiter
    v = r.Text
    End If
    Next r
    If Len(myDelimiter) > 0 Then
    Concat = Left(Concat, Len(Concat) – Len(myDelimiter))
    End If
    End Function

Os comentários estão fechados.