Notifications
Clear all

Como CONCATENAR com critérios

12 Posts
4 Usuários
0 Reactions
2,287 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá,

Gostaria de pedir a ajuda de vocês para uma questão. A princípio a solução passaria pelo uso da função INDICE e a criação de uma coluna auxiliar, mas a minha dúvida busca por outras possíveis soluções, talvez mais práticas.

Tenho que concatenar os valores (Texto) de uma coluna com base em 2 critérios que estão em outras 2 coluna.

O primeiro critério é um número. O segundo critério é um texto. Quando nas linhas da coluna C os critérios correspondam, o valor da coluna C é concatenado.

Em anexo uma planilha exemplo.

Agradeço pela ajuda.

 
Postado : 02/02/2016 1:54 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Luiz, com fórmula vai ser difícil... *(senão imposssível)

Com VBA fica fácil !

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/02/2016 7:57 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

OLá Fernando, tudo bem?

Como eu disse, a solução passaria pelo uso da função INDICE e a ajuda de algumas colunas acessórias. Veja nesse exemplo a minha própria solução.

Foi criado um intervalo E16:E21 onde são concatenados os critérios. No intervalo F16:F21 são contadas quantas vezes ocorrem as coincidências. Esse número servirá para através da função INDICE, concatenar a fórmula :

;ÍNDICE($D$16:$D$21;CORRESP(C11;SE($B$16:$B$21=B11;SE($F$16:$F$21=1;$C$16:$C$21);0);0))

No intervalo A9:A11 faço a busca da quantidade de coincidências de acordo com os próprios critérios, e uso para replicar a fórmula alterando apenas o valor na parte da fórmula ";SE(A9=2".

Funciona, pode testar. Mas é preciso repetir a fórmula por uma determinada quantidade, um número provável de coincidências. No caso foram previstas 3 coincidências.

Por isso a minha busca por algo mais prático.

Segue o exemplo.

 
Postado : 02/02/2016 8:11 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Com essa fórmula:

=
SE(A9=1;ÍNDICE($D$16:$D$21;CORRESP(C9;SE($B$16:$B$21=B9;SE($F$16:$F$21=1;$C$16:$C$21);0);0));
SE(A9=2;ÍNDICE($D$16:$D$21;CORRESP(C9;SE($B$16:$B$21=B9;SE($F$16:$F$21=1;$C$16:$C$21);0);0))&ÍNDICE($D$16:$D$21;CORRESP(C9;SE($B$16:$B$21=B9;SE($F$16:$F$21=2;$C$16:$C$21);0);0));
SE(A9=3;ÍNDICE($D$16:$D$21;CORRESP(C9;SE($B$16:$B$21=B9;SE($F$16:$F$21=1;$C$16:$C$21);0);0))&ÍNDICE($D$16:$D$21;CORRESP(C9;SE($B$16:$B$21=B9;SE($F$16:$F$21=2;$C$16:$C$21);0);0))&ÍNDICE($D$16:$D$21;CORRESP(C9;SE($B$16:$B$21=B9;SE($F$16:$F$21=3;$C$16:$C$21);0);0));"")))

Vai ser no mínimo difícil, ou impossível se vc tiver mais de x items a concatenar.... perceba, qdo eu digo que é impossível, é pq tentei com fórmulas matriciais, o problema é a limitação da função concatenar() que é uma negação no quesito parametros... Se vc puder e quiser com VBA, eu te mostro como. Caso contrário, sinta-se a vontade para sofrer com sua fórmula até perceber que é perda de tempo insistir nela ;-)

Uma dica para facilitar seu trabalho, não coloque as duas tabelas uma sobre a outra, coloque-as lado a lado !

Boa sorte !

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/02/2016 8:57 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá fernando, beleza.

Rapaz, as possibilidades de coincidências dos critérios é limitada a mais ou menos 8, ou seja, a repetição da fórmula se daria no máximo 8 vezes. Sou limitadíssimo com VBA, mas gosto muito de fórmulas. Diante da quase "impossibilidade" de uma solução, fiquei muito satisfeito de ver o contraditório. Aprendi a relativisar as situações, fracionar os problemas, descer a menor instância para compreender e resolver as dificuldades, em todos os sentidos.

Obrigado pelas sugestões, mas vou ficar com minha fórmula pois não acredito na perda de tempo.

Um abraço.

 
Postado : 03/02/2016 6:29 am
carlosrgs
(@carlosrgs)
Posts: 631
Prominent Member
 

Cara, eu até sei um modo de fazer, mas a fórmula vai ficar grandinha.

Segue exemplo.

Na fórmula só vai concatenar se a ocorrência Coluna A e B se repetir 8 vezes, se repetir mais a Nona ocorrência não será listado, tem que acrescentar na fórmula.

Complementando.

Para buscar num range maior só modificar a fórmula.

Exemplo:

=CONCATENAR(SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$1))-15;1);"");SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$2))-15;1);"");SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$3))-15;1);"");SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$4))-15;1);"");SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$5))-15;1);"");SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$6))-15;1);"");SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$7))-15;1);"");SEERRO(ÍNDICE($C$16:$C$100;MENOR(SE(ÉERROS(LOCALIZAR(A9&B9;$A$16:$A$100&$B$16:$B$100;1));"";LIN($C$16:$C$100));LIN($A$8))-15;1);""))

Lembrando que fórmula Matricial é necessário ao final da edição deve-se pressionar as teclas [CTRL]+[SHIFT]+[ENTER]

_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.

 
Postado : 03/02/2016 6:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Luiz, se vc tem um limite máximo de 8 combinações, e a fórmula já te atendeu, use-a.
Sugiro então, para facilitar sua vida, utilize algumas colunas adicionais, tipo, 8. Para assim facilitar escrita e entendimento dela uma vez pronta.
Daí vc usa uma nova coluna para decidir de qual vai tirar seu resultado... é uma ideia !

Ah, com o VBA eu reescreveria o CONCATENAR() e assim atenderia sua necessidade de forma sensacional, com uma fórmula só, de no máximo 1 linha.... E por isso que o VBA pode ser uma máo na roda...

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 03/02/2016 6:57 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Carlosrgs,

Obrigado pela dica. Acredito que funcione, porém tenho que considerar a limitação da versão do Excel onde a fórmula será aplicada. No caso é a versão 2000, e assim, deu "formula muito grande".

Obrigado.

 
Postado : 03/02/2016 8:13 am
carlosrgs
(@carlosrgs)
Posts: 631
Prominent Member
 

Talvez a ideia do Fernando de ter uma coluna auxiliar ajude no caso.

Até um tempo atrás eu só fazia coluna auxiliar, até começar a aprender as matriciais.

_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.

 
Postado : 03/02/2016 8:15 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Entendi,

Dividir em 8 e depois concatená-las. Vou analisar a opção.

Obrigado!

 
Postado : 03/02/2016 8:49 am
(@pexis)
Posts: 112
Estimable Member
 

não vi as outras soluções, veja se é isso..

Resposta útil? Clique na mãozinha ao lado do botão Citar.

 
Postado : 03/02/2016 11:24 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Pexis,

Obrigado pela sua atenção. Minha opção mais viável será utilizar colunas, como você fez, para depois concatenar. Nesse caso, eu também evitaria o uso de matriciais que deixam a planilha mais lenta. A quantidade de linhas a serem concatenadas é muito grande.

Valeu.

 
Postado : 04/02/2016 6:08 am