Академический Документы
Профессиональный Документы
Культура Документы
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Developer Network
Tecnologias
Entrar
Downloads
Programas
Comunidade
Documentao
Assinaturas do MSDN
Obter ferramentas
Exemplos
Acesso rpido
Archived Forums>Excel
Pergunta
Amigos, existe alguma forma de concatenar dados com quebra de texto? Eu tenho esta situao:
0
Entrar
para
Votar
20ST
20VH
1 X 20ST
1 X 20VH
Tks
Jerson
Respostas
1 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Ol, Jerson.
Vou dividir este post em dois tpicos, a saber: o primeiro tentar uma possvel soluo para sua demanda
e o segundo uma sugesto de como eu faria, que voc pode ou no adotar.
0
Entrar
para
Votar
1. Possvel Soluo:
a. Antes de mais nada, saiba que, atravs de frmulas, no consigo centralizar o X no valor retornado pois,
at onde eu saiba, isso s pode ser conseguido atravs de formatao da clula (algum tipo bem esotrico
do qual nem mais me lembro).
b. Isto posto, creio que a frmula abaixo poder ajud-lo:
Code Snippet
=SE(.NO.DISP(PROCV(BM10;INDIRETO("Dados!B1:Z100");9));"";SE(ERROS(LOCALIZAR(CARACT(10);
PROCV(BM10;INDIRETO("Dados!B1:Z100");9)));PROCV(BM10;INDIRETO("Dados!B1:Z100");9) & " X
";SUBSTITUIR(PROCV(BM10;INDIRETO("Dados!B1:Z100");9);CARACT(10);" X " & CARACT(10);1)))
Observe que a frmula acima, embora menor, tambm no nenhum bom exemplo de programao, j
que a consulta repetida vrias vezes o que degrada a performance. Em resumo, nunca ponha uma
frmula dessas no seu currculo.
c. Ainda sobre a frmula acima, ela produzir um resultado similar aos abaixo:
c.1. Sem quebra de texto: 1 ser transformado em 1 X
c.2 Com quebra de texto:
1 ser transformado em 1 X
1 1
Caso estas duas sugestes no atendam suas necessidades, faa-me saber para que possamos, juntos,
atingir uma soluo adequada.
2 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Todas as Respostas
Vc vai ter que formatar inicialmente a clula para quebra de texto automtica.
Depois concatenar como no exemplo =A1&" X "&B1&CARACT(10)&B1&" X "&C1
0
Entrar
para
Votar
Ol, Jerson.
Alm da soluo proposta pelo Adilson, voc pode querer experimentar a frmula abaixo:
0
Entrar
para
Votar
Code Snippet
=SE(OU(CL.VAZIA(A1);CL.VAZIA(B1));"";EXT.TEXTO(A1;1;(LOCALIZAR(CARACT(10);A1))-1) & " X " &
EXT.TEXTO(B1;1;(LOCALIZAR(CARACT(10);B1))-1) & CARACT(10) & EXT.TEXTO(A1;
(LOCALIZAR(CARACT(10);A1))+1;NM.CARACT(A1)-(LOCALIZAR(CARACT(10);A1))) & " X " & EXT.TEXTO(B1;
(LOCALIZAR(CARACT(10);B1))+1;NM.CARACT(B1)-(LOCALIZAR(CARACT(10);B1))))
3 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Adilson,a tua frmula cria uma referncia circular se eu utilizo a C1 como destino. Se eu utilizo outra clula
qualquer,o resultado fica assim:
Entrar
para
Votar
1 X 20ST
40HC
20ST
40HC X 1
20ST
40HC 1 X 20ST
40HC
1
1 X 20ST
40HC
1
1 X 20ST
1
20ST
40HC 1
40HC
1 X 20ST
40HC
Tks
Jerson
4 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Alm da soluo proposta pelo Adilson, voc pode querer experimentar a frmula
abaixo:
0
Entrar
para
Votar
Code Snippet
=SE(OU(CL.VAZIA(A1);CL.VAZIA(B1));"";EXT.TEXTO(A1;1;(LOCALIZAR(CARACT(10);
A1))-1) & " X " & EXT.TEXTO(B1;1;(LOCALIZAR(CARACT(10);B1))-1) & CARACT(10) &
EXT.TEXTO(A1;(LOCALIZAR(CARACT(10);A1))+1;NM.CARACT(A1)(LOCALIZAR(CARACT(10);A1))) & " X " & EXT.TEXTO(B1;
(LOCALIZAR(CARACT(10);B1))+1;NM.CARACT(B1)-(LOCALIZAR(CARACT(10);B1))))
Otvio, tua frmula perfeita, xou de bola! S peo que voc, por gentileza,adicione um argumento para
que quando os valores em A1 e B1 no estiverem com quebra de texto o resultado no retorne erro. Ex.:
3
20ST 3 X 20ST
Tks
Jerson
5 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Ol, Jerson.
0
Entrar
para
Votar
Code Snippet
=SE(OU(CL.VAZIA(A1);CL.VAZIA(B1));"";SE(OU(ERRO(LOCALIZAR(CARACT(10);
A1));ERRO(LOCALIZAR(CARACT(10);B1)));A1 & " X " & B1;EXT.TEXTO(A1;1;(LOCALIZAR(CARACT(10);A1))-1)
& " X " & EXT.TEXTO(B1;1;(LOCALIZAR(CARACT(10);B1))-1) & CARACT(10) & EXT.TEXTO(A1;
(LOCALIZAR(CARACT(10);A1))+1;NM.CARACT(A1)-(LOCALIZAR(CARACT(10);A1))) & " X " & EXT.TEXTO(B1;
(LOCALIZAR(CARACT(10);B1))+1;NM.CARACT(B1)-(LOCALIZAR(CARACT(10);B1)))))
Atenciosamente,
0
Entrar
para
Votar
Perfeito, Otvio. Sem querer abusar de sua boa vontade, vou precisar desta mesma frmula numa outra
planilha s que utilizando PROCV.No momento estouutilizando a seguinte frmula:
=CONCATENAR(PROCV(BM10;INDIRETO("Dados!B1:Z100");9);" X
";PROCV(BM10;INDIRETO("Dados!B1:Z100");10)).
Tks
Jerson
Ol, Jerson.
Eu no consegui entender qual o resultado pretendido. Conto com sua compreenso no sentido de me
enviar mais esclarecimentos.
0
Entrar
para
Votar
Atenciosamente,
6 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Okento vamos simplificar... gostaria que voc apenas inserisse na frmula =PROCV(BM10;
INDIRETO("Dados!B1:Z100");9), o argumento para que o resultado retorne o formado com quebra de
texto, quando os dados na origem tiverem quebra de texto. Quando no,retorna normal.
0
Entrar
para
Votar
Tks
Jerson
Ol, Jerson.
0
Entrar
para
Votar
Code Snippet
=SE(OU(.NO.DISP((PROCV(BM10;INDIRETO("Dados!B1:Z100");9)));.NO.DISP((PROCV(BM10;
INDIRETO("Dados!B1:Z100");10))));"";SE(OU(ERRO(LOCALIZAR(CARACT(10);(PROCV(BM10;
INDIRETO("Dados!B1:Z100");9))));ERRO(LOCALIZAR(CARACT(10);(PROCV(BM10;
INDIRETO("Dados!B1:Z100");10)))));(PROCV(BM10;INDIRETO("Dados!B1:Z100");9)) & " X " &
(PROCV(BM10;INDIRETO("Dados!B1:Z100");10));EXT.TEXTO((PROCV(BM10;INDIRETO("Dados!B1:Z100");9));1;
(LOCALIZAR(CARACT(10);(PROCV(BM10;INDIRETO("Dados!B1:Z100");9))))-1) & " X " &
EXT.TEXTO((PROCV(BM10;INDIRETO("Dados!B1:Z100");10));1;(LOCALIZAR(CARACT(10);
(PROCV(BM10;INDIRETO("Dados!B1:Z100");10))))-1) & CARACT(10) &
EXT.TEXTO((PROCV(BM10;INDIRETO("Dados!B1:Z100");9));(LOCALIZAR(CARACT(10);
(PROCV(BM10;INDIRETO("Dados!B1:Z100");9))))+1;NM.CARACT((PROCV(BM10;INDIRETO("Dados!B1:Z100
");9)))-(LOCALIZAR(CARACT(10);(PROCV(BM10;INDIRETO("Dados!B1:Z100");9))))) & " X " &
EXT.TEXTO((PROCV(BM10;INDIRETO("Dados!B1:Z100");10));(LOCALIZAR(CARACT(10);
(PROCV(BM10;INDIRETO("Dados!B1:Z100");10))))+1;NM.CARACT((PROCV(BM10;INDIRETO("Dados!B1:Z10
0");10)))-(LOCALIZAR(CARACT(10);(PROCV(BM10;INDIRETO("Dados!B1:Z100");10)))))))
IMPORTANTE:
A frmula acima acabou por ficar muito "gorda", com 1.135 caracteres, o que a torna adequada
para o Excel 2.007 mas inadequada para o 2.003, que s permitiria 1.024 caracteres por frmula.
Alm do mais, como as pesquisas (PROCV()) so repetidas vrias vezes, a performance acabar por
ser degradada.
Assim sendo, creio que as chamadas a PROCV() deveriam ser inseridas em outras clulas - tipo as clulas
A1 e B1 da frmula original - e, somente ento, os resultados seriammanipulados pela frmula de
concatenao.
Atenciosamente,
P.S.: editei esta resposta para enfatizar que, em minha modesta opinio, a frmula acima no segue as
boas prticas de programao, acabando por depor contra seu autor.
7 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Ok Otvio, vamos tentar novamente... eu vou continuar utilizando nesta planilha apenas a frmula =PROCV(BM10;
INDIRETO("Dados!B1:Z100");9). Porm eu gostaria que voc inserisse nela o argumento para que ela retorne os
dados com quebra de texto, quando houver e quando no, retorne normal.
0
Entrar
para
Votar
Tks
Jerson
Para que eu possa ajud-lo, vou precisar que voc seja, por favor, mais explcito, respondendo-me os
seguintes pontos:
0
Entrar
para
Votar
1. Em quais clulas (ou intervalo de clulas)se encontram os dados antes da concatenao. Isso equivale
ao desenho abaixo, cpia da informao colocada por voc em seu questionamento:
+------+------+
| 1 | 20ST |
| 1 | 20VH |
+------+------+
3. Finalmente, em que parte da frmula ou em substituioa que parmetro voc quer que a frmula seja
colocada.
Atenciosamente,
8 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Tambm peo desculpas por meu exguo conhecimento, mas vamos l... a PROCV busca os dados em uma linha de
acordo com um critrio pr-estabelecido, certo? Ento vamos a minha frmula:
0
Entrar
para
Votar
=PROCV(BM10;INDIRETO("Dados!B1:Z100");9), onde:
BM10 a clula onde insiro o critrio, ou seja, o nmero do documento. Esta clula fica na plan "x".
Digamos que em BM10, plan "x",eu digite o nmero de um documento"y" e que, em Dados, este doc
esteja na linha 5. Ento o dado que euestou buscandoest em Dados!I5, certo? Agora digamos que este
dado esteja com quebra de texto. Ento eu preciso que a frmula =PROCV(BM10;
INDIRETO("Dados!B1:Z100");9), contenha o argumentoCARACT(10), que, pelo que entendi, o argumento
que retorna um dado com quebra de texto.
Tks
Jerson
9 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Ol, Jerson.
Gostaria de contar com sua pacincia para me passar mais duas informaes:
0
Entrar
para
Votar
1. D-me exemplos de dados do intervalo Dados!B1:B100, onde ser realizada a procura pela coincidncia
com X ! BM10. Estes dados so resultado da aplicao da frmula original que te passei (aquela da
primeira resposta)?
2. D-me exemplos do tipo de informao que voc pretende digitar na clula X ! BM10 e com que tipo de
informao no intervalo Dados ! B1:B100 ele deveria coincidir. Observe que no me interessa o retorno da
funo, ou seja, o dado presente na coluna 9 de Dados ! B1:Z100 e sim o valor encontrado como
coincidente no intervalo Dados ! B1:B100.
Por ora, tomo a liberdade de adiantar que, at onde eu sei, a funo PROCV() procura por uma ocorrncia
do primeiro parmetro (exata ou inexata e, no seu caso, inexata pois voc omitiu o terceiro parmetro)
dentro do intervalo especificado como segundo parmetro. Portando, para que a procura funcione voc
deve digitar, em BM10, o dado da forma como espera encontr-lo no intervalo Dados ! B1:B100.
Vamos l...
0
Entrar
para
Votar
1. Os dados da plan Dados so importados atravs de arquivo txt. Na coluna B esto alocados os nmeros
dos documentos e nas demais, outros dados relativos aos documentos. Nesta planilha, no estou
utilizando aquela primeira frmula.
2. Na X!BM10 eu digito o nmero do documento, Ex. BR1356532, que deve coincidir com o nmero do
documento procurado na Dados!B1:B100.
A ttulo de esclarecimento, o que estou criando um modelo de fatura. Eu carrego as informaes na plan
Dados e organizo-os na plan X, utilizando a frmula PROCV, distribuindo as informaes de acordo com o
layout da fatura.
Tks
Jerson
10 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Ol, Jerson.
0
Entrar
para
Votar
Minha mulher costuma dizer que eu sou o sujeito mais teimoso do mundo e, em momentos como este,
sinto-me compelido a corroborar com ela. Digo isso porque, ao analisar as mensagens anteriores e, em
especial, esta,
JVieira wrote:
Perfeito, Otvio. Sem querer abusar de sua boa vontade, vou precisar desta mesma
frmula numa outra planilha s que utilizando PROCV.No momento estouutilizando a
seguinte frmula: =CONCATENAR(PROCV(BM10;INDIRETO("Dados!B1:Z100");9);" X
";PROCV(BM10;INDIRETO("Dados!B1:Z100");10)).
Tks
Jerson
fico com a insistente - ou teimosa - sensao de que o que voc deseja concatenar o valor retornado
pela funo
PROCV(BM10;INDIRETO("Dados!B1:Z100");9) com o valor retornado pela funo
PROCV(BM10;INDIRETO("Dados!B1:Z100");10), nos mesmos moldes que, no incio, concatenamos os
valores presentes nas clulas A1 e B1.
Agora, por favor, responda - me: isso mesmo ou eu estou teimando em entender errado?
Caso eu, ainda, esteja entendendo errado, d-me, por favor, exemplos dos valores sobre os quais voc
quer aplicar a frmula e onde eles se encontram.
Atenciosamente,
11 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
0
Entrar
para
Votar
Mas voc tem razo em teimar. que como a frmula ficou muito grande e eu trabalho com o Excel 2003,
eu resolvi simplificar e no concatenar os dados. Portanto a soluo queseria:
DE
1
20ST
20VH
PARA
1 X 20ST
1 X 20VH
Ficou assim:
DE
1
20ST
20VH
PARA
1
1
20ST
20VH
Desta forma no seria necessrio concatenar os dados e a frmula ficaria bem menor. Portanto, basta que
voc insira na frmulaPROCV(BM10;INDIRETO("Dados!B1:Z100");9) aquele argumento que retorna o dado
com quebra de texto. Caso minha explicao ainda esteja nebulosa, posso te enviar uma planilha modelo.
Tks
Jerson
12 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Ol, Jerson.
Vou dividir este post em dois tpicos, a saber: o primeiro tentar uma possvel soluo para sua demanda
e o segundo uma sugesto de como eu faria, que voc pode ou no adotar.
0
Entrar
para
Votar
1. Possvel Soluo:
a. Antes de mais nada, saiba que, atravs de frmulas, no consigo centralizar o X no valor retornado pois,
at onde eu saiba, isso s pode ser conseguido atravs de formatao da clula (algum tipo bem esotrico
do qual nem mais me lembro).
b. Isto posto, creio que a frmula abaixo poder ajud-lo:
Code Snippet
=SE(.NO.DISP(PROCV(BM10;INDIRETO("Dados!B1:Z100");9));"";SE(ERROS(LOCALIZAR(CARACT(10);
PROCV(BM10;INDIRETO("Dados!B1:Z100");9)));PROCV(BM10;INDIRETO("Dados!B1:Z100");9) & " X
";SUBSTITUIR(PROCV(BM10;INDIRETO("Dados!B1:Z100");9);CARACT(10);" X " & CARACT(10);1)))
Observe que a frmula acima, embora menor, tambm no nenhum bom exemplo de programao, j
que a consulta repetida vrias vezes o que degrada a performance. Em resumo, nunca ponha uma
frmula dessas no seu currculo.
c. Ainda sobre a frmula acima, ela produzir um resultado similar aos abaixo:
c.1. Sem quebra de texto: 1 ser transformado em 1 X
c.2 Com quebra de texto:
1 ser transformado em 1 X
1 1
Caso estas duas sugestes no atendam suas necessidades, faa-me saber para que possamos, juntos,
atingir uma soluo adequada.
13 de 15
12/03/2016 17:32
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Otvio, como o X no precisa aparecer na mesma clula que o valor procurado,vou ficar apenascom a ltima linha
da primeira frmula: =SUBSTITUIR(PROCV(BM10;INDIRETO("Dados!B1:Z100");9);CARACT(10);CARACT(10);1). Era
0
Entrar
para
Votar
Embora sua sugesto tambm seja vlida, a frmula acima atende perfeitamente a minha necessidade.
Muito obrigado pela ajuda e me desculpe a amolao.
Um grande abrao,
Jerson
Ol, Jerson.
0
Entrar
para
Votar
retorno a este tpico para alert-lo que a frmula por voc postada acima faz aquilo que, na linguagem
popular, expresso como "trocar seis por meia dzia".
Isso porque quando voc desmonta a frmula:
=SUBSTITUIR(PROCV(BM10;INDIRETO("Dados!B1:Z100");9);CARACT(10);CARACT(10);1)
voc observa que o que ela faz substituir a primeira ocorrncia deCARACT(10)
emPROCV(BM10;INDIRETO("Dados!B1:Z100");9)por outro CARACT(10) o que, convenhamos, no
altera o valor de retorno.
Tomo, ento, a liberdade de sugerir a voc que revise esse cdigo e seus objetivos para conferir se tem o
que pretendia. Em caso negativo, saiba que estaremos (eu, como os demais colaboradores) ad eternum
aqui sua disposio.
Atenciosamente,
Fique tranqilo, meu "teimoso" amigo... eu entendo bulhufas de programao, mas a frmula est fazendo
exatamente o que eu queria... no vamos mexer com est quieto... hehehe
0
Entrar
para
Votar
Um grande abrao Otvio, e, mais uma vez, muito obrigado por sua ateno.
Sds
Jerson
14 de 15
12/03/2016 17:32
Centros do desenvolvedor
Windows
Office
https://social.msdn.microsoft.com/Forums/pt-BR/940e6608-6a55-436c-...
Recursos de aprendizagem
Comunidade
Suporte
Fruns
Suporte autnomo
Channel 9
Blogs
MSDN Magazine
Codeplex
Visual Studio
Programas
Microsoft Azure
Mais...
Brasil (Portugus)
15 de 15
Imagine Cup
Boletim informativo
Termos de uso
Marcas comerciais
2016 Microsoft
12/03/2016 17:32