Notifications
Clear all

CONCATENAR - concatenar dados de várias célula para uma.

5 Posts
2 Usuários
0 Reactions
1,025 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Camaradas, muito boa noite.

Estou recorrendo à vocês na intenção de, se for possível, arrumarem uma solução para uma situação em específico:
Tenho os dados dispostos em diversas células (Ex: A1, A2, A3 e etc.) e gostaria de concatenar todos os dados para uma única célula.
Na minha pesquisa por aqui, encontrei este brilhante código em VBA sugerido pelo alexandrevba no tópico:
viewtopic.php?f=20&t=12207&p=63974&hilit=concatenar#p63974

Sub AleVBA_12207()
Dim myCell As String
Dim cl As Range
myCell = Range("$C$2").Value
For Each cl In Range("$A$2:$A" & Range("$A$65536").End(xlUp).Row)
myCell = myCell & "; " & cl
Next cl
Range("$C$2") = myCell
End Sub

O meu problema é que o intervalo de células a ser concatenado na planilha é variável (Ex: Células A1:A306 em uma situação, e em uma outra, poderá ser B7:B415 e etc.) e na linha de código acima o intervalo dos dados a serem "convertidos" em uma única célula fica sempre entre $A$2:$A$65536.

Sei que uma opção é o uso da função CONCATENAR ou o do "&", mas há de concordar comigo que em uma planilha com um número muito grande de dados em uma coluna ou linha fica pouco prático. Dessa forma, gostaria de saber se existiria alguma função, comando ou "adaptação" na linha de código acima que me permitisse selecionar as células a serem revertidas para uma única célula de uma forma um pouco mais prática do que usando CONCATENAR e "&".

Se houver, e puderem ajudar, eu ficaria muito grato.

Abraço.

 
Postado : 02/08/2014 7:23 pm
(@edcronos)
Posts: 1006
Noble Member
 

ola,
primeiro
& e concatenar é a mesma coisa, "&" é como um símbolo representativo "pelo menos eu acho" :P
para fazer oq vc quer tem que se estudar a disposição dos dados na sua planilha para se definir a ação da macro

tipo

(Ex: Células A1:A306 em uma situação, e em uma outra, poderá ser B7:B415 e etc.)

oq vai definir os dados a serem concatenados?
seria espaços em branco?
ou textos específicos

poste uma planilha de exemplo com os tipos de dados que vão ser concatenados
e especifique oq não vai ser.

até.

 
Postado : 02/08/2014 7:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

- Crie um módulo no vba
- cole o código abaixo:

Option Explicit

'Autor......: Fernando Couto Fernandes
'Data.......: 03/08/2014 (dma)
'Rotina.....: SuperConcatenar()
'Parâmetros.: Celulas é um intervalo de células da planilha, pode ser uma ou mais
'...........: Delimitador é o texto que vai ficar entre cada valor concatenado, pode ser omitido,
'...........:       neste caso o valor padrão é vbNullString, ou seja, "", ou ainda, texto vazio
'Descrição..: Esta função definida pelo usuário (UDF - User Defined Function) promete concatenar dados de um intervalo
'...........: Usando um dado delimitador entre os valores das células

Public Function SuperConcatenar(ByRef Celulas As Excel.Range, Optional ByVal Delimitador As String = vbNullString) As String
On Error Resume Next
Dim arrCelulas  As Variant
Dim cntLin      As Long
Dim cntCol      As Long
    
    'pega os dados do intervalo numa matriz
    arrCelulas = Celulas.Value
    
    If VBA.IsArray(arrCelulas) Then
    
        'se for matriz/array, concetene todos os valores
        For cntLin = LBound(arrCelulas, 1) To UBound(arrCelulas, 1) Step 1
            For cntCol = LBound(arrCelulas, 2) To UBound(arrCelulas, 2) Step 1
            
                SuperConcatenar = SuperConcatenar & Delimitador & arrCelulas(cntLin, cntCol)
                
            Next cntCol
        Next cntLin
        
        'Se tudo deu certo, então a string SuperConcatenar tem como primeiro caractere o delimitador, o que não era o esperado.
         'A linha abaixo resolve isso.
        If VBA.Len(Delimitador) < 1 Then
            SuperConcatenar = VBA.Trim(VBA.Right(SuperConcatenar, VBA.Len(SuperConcatenar) - VBA.Len(Delimitador)))
        End If
    Else
        'caso contrário, devolva o valor da célula única
        SuperConcatenar = Celulas.Value
    End If
    
    Erase arrCelulas
    arrCelulas = Empty

End Function

- Volte pra planilha e digite numa célula qualquer:

=superconcatenar(A1:A306)

ou

=superconcatenar(B7:B415;" ")

ou

=superconcatenar(A1:J10;".")

ou

 
Postado : 02/08/2014 9:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Edcronos

Acredito que, se eu já tenha mencionado que não gostaria que a solução fosse dada com a utilização do comando CONCATENAR ou do "&", seria porque, intrínsicamente, eu já deveria saber, no mínimo, do resultado na utilização dos dois. Ou seja, dentro do funcionamento do exemplo dado, e das pouquíssimas coisas que aprendi no EXCEL seria que, a função CONCATENAR e a utilização do "&" seriam a mesma coisa, concorda? ;)

De qualquer forma, fico muito grato pelo atenção e pela resposta.

Abraço.

========================================

Prezado fernando.fernandes ,

Fico muitíssimo agradecido pela resposta e pelo código em VBA.
Fico impressionado com a habilidade de vocês daqui.
Na minha opinião, vocês são Cientistas do EXCEL !!! :lol:
Quanto ao código, era exatamente o que eu queria!
Muito obrigado também por ter tido a paciência de inserir linhas para comentários, tentando explicar o que cada bloco de código faz dentro da função.
Tentarei, dentro da minha parca limitação de inteligência, estudar e entender cada comando.

Muito obrigado mesmo!!!

Grande abraço !

 
Postado : 03/08/2014 5:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Valeu , fico feliz que funcionou.
Fiz uma alteração agora... Pq se vc usar delimitador com mais de um caracter, daria problema. Sugiro copiar o código novo.
Como sou moderador eu tenho poderes de editar o que escrevi. Então, acredite, mudei uma linha de código.

Quanto ao Concatenar() e ao E comercial, vulgo & (que aparece estranho no portal):
Qualquer coisa em células que use abrir e fechar parênteses é uma função, outras opções são operadores, que podem ser matemáticos ou não.

Há exemplos mais óbvios:
Usar =SOMA() ou usar + ? Qualquer um dos dois resolve, e conhecemos as vantagens e limitacões.
Usar CONCATENAR() ou & ? Qualquer um dos dois resolve, e conhecemos as vantagens e limitações.

Um dia vou escrever um artigo sobre as diferenças conceituais entra fórmulas e funções e isso facilitará a decisão do uso. Mas no final, é fato que cada pessoa usa o que melhor lhe convier.

Bom domingo, um abraço e obrigado pela oportunidade de ajudar.

FF

 
Postado : 03/08/2014 6:06 am