em Dicas e tutoriais

Concatene apenas células com texto no Excel

Você já deparou, certamente, com uma situação em que precisou combinar no Excel os valores de duas ou mais células em uma outra célula. A este processo chama-se concatenação, e o programa da Microsoft possui uma função especialmente criada para fazer isso, chamada CONCATENAR.

A sintaxe da função é simples:

=CONCATENAR(texto1, [texto2], ...)

No exemplo acima ilustrado, a célula D4 terá, como string resultante, “Daniel Santos“, isso porquê foi informado, como um dos parâmetros, o espaço (” “).

A função CONCATENAR será eficiente sempre que você informar, como parâmetros, células ou intervalos (ranges) que possuem texto inserido.

Agora, imagine que você possui uma tabela com vários dados, e que, por algum motivo, existem colunas ora em branco, ora preenchidas, em algumas linhas. Só que você precisa concatenar somente os textos das colunas preenchidas. Algo mais ou menos assim:

Se todas as células entre as colunas B e E estivessem preenchidas com nomes, seria fácil criar uma única fórmula CONCATENAR na coluna F, que tivesse a seguinte sintaxe, arrastando a fórmula para baixo nas demais linhas:

=CONCATENAR(B3:E3)

Mas este não é o caso, e a função CONCATENAR, especificada como acima, não será capaz de apresentar os resultados necessários. O que fazer então?

Embora provavelmente existam algumas dezenas de soluções possíveis, eu, ao me deparar com a situação acima em um outro contexto, acabei optando por criar uma função CONCATENAR customizada, usando VBA.

Eis a função em questão:

Function Conca(Faixa As Range, Optional separador As String = " ") As String
''''
' Concatena um conjunto de células, considerando como valores
' apenas aquelas em que exista algum valor preenchido
'
' Por Daniel Santos
' http://danielsantos.org/
'

'Declaração de variáveis
Dim c As Range
Dim strConcat As String

'Examina cada célula da faixa especificada
For Each c In Faixa.Cells

'Se o valor da célula atual contiver texto...
If c.Value <> "" Then
'Constrói a string concatenada célula-a-célula
strConcat = IIf(strConcat = "", c.Value & separador, strConcat & c.Value & separador)
End If

Next

'Retorna a string resultante para o Excel
Conca = strConcat

End Function

Uma vez que ela seja inserida em um módulo VBA, bastará utilizá-la como se fosse uma função pré-definida do Excel:

=CONCA(B3:E3)

Arraste o conteúdo para baixo, e pronto.

Uma coisa interessante que a função que criei admite um parâmetro opcional: o separador. Por default, a função usa espaços em branco entre os termos, mas você pode trocar o espaço por um ponto-e-vírgula, uma vírgula ou qualquer outro caractere que você quiser. Veja abaixo um exemplo com o ponto-e-vírgula como separador:

Espero que a função em questão ajude mais pessoas, e que ela seja útil também para você. Qualquer dúvida, diga aí nos comentários.

Escreva um comentário

Comentário