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.
Bom proveito!
Referências
http://excel.tips.net/Pages/T003062_Concatenating_Ranges_of_Cells.html
Ola,
Solicito um favor, estou com problemas no código abaixo descrito.
….
Não sei se expliquei direito o problema.
Um abraço
Reinaldo
Colega,
O melhor lugar para esta dúvida é no nosso fórum:
http://www.tomasvasquez.com.br/forum
Nos vemos lá!
Abraços
Tomás
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