Sie sind auf Seite 1von 5

24/05/13

Retornar Todas as Correspondncias de um PROCV - Excel - Ambiente Office

Busque neste site:

Pesquisar

Retornar Todas as Correspondncias de um PROCV


ltima atualizao: 30/03/2012 Introduo Exemplo -Explicao Retornar Correspondncias numa nica Clula Referncias

Introduo
A funo PROCV uma das mais utilizadas do Excel. J escrevi um artigo sobre essa funo no site (clique aqui para visitar entanto, ela possui uma limitao: retorna apenas a primeira correspondncia encontrada de um vetor. Este artigo mostra como retornar todas as correspondncias de um PROCV.

Exemplo
Considere a tabela abaixo:

www.ambienteoffice.com.br/excel/retornar_todas_as_correspondencias_de_um_PROCV/

1/5

24/05/13

Retornar Todas as Correspondncias de um PROCV - Excel - Ambiente Office

Suponha que voc queria o Cdigo de todas as correspondncia de Felipe (a100 , b842 , e823 e f431 ). Digite, por exemplo, em e em C15 a frmula: =SE(LINS($1:1)>CONT.SE($B$3:$B$13;$B$15);"";NDICE(C$3:C$13;MENOR(SE($B$3:$B$13=$B$15;LIN($B$3:$B$13 LIN(B$3)+1;FALSO);LINS($1:1)))) (frmula matricial)

Observe que se trata de uma frmula matricial, portanto deve ser entrada comntrada com Ctrl+Shift+Enter. Para saber mais sobre frmulas matriciais, clique aqui: Nessa frmula, B$15 o valor procurado (Felipe) B$3:B$13 o intervalo em que ser procurado Felipe. C$3:C$13 o intervalo que ser retornado a correspondncia de Felipe (a100 , b842 , e823 e f431 ) B$3 a primeira clula onde se iniciam os dados do intervalo procurado.

Observe que ao apertar Ctrl+Shift+Enter, a frmula retornou apenas o primeiro resultado, que a100 . Para ver os outros resultado basta clicar no canto direito inferior da clula, arrastar o mouse para baixo e soltar o boto:

Os resultados em branco abaixo de f431 significa que no h mais correspondncias para Felipe. Elimine (delete) esses resultados e branco, se desejar. Se quiser localizar as correspondncias das Cores , basta copiar e colar (Ctrl+C, Ctrl+V) a frmula para a direita q as referncias esto ajustadas para retornar as correspondncias das colunas subsequentes.

Observe a funo PROCV no foi escrita em nenhuma parte da frmula. Ela foi utilizada no ttulo apenas como um neologismo, j qu nessa frmula quem faz o papel de PROCV a funo NDICE. Alternativamente, voc pode optar para os valores aparecerem horizontalmente ao invs de verticlamente, como mostrado abaixo:

www.ambienteoffice.com.br/excel/retornar_todas_as_correspondencias_de_um_PROCV/

2/5

24/05/13

Retornar Todas as Correspondncias de um PROCV - Excel - Ambiente Office

Basta usar a frmula, neste caso, na forma: =SE(COLS($A:A)>CONT.SE($B$3:$B$13;$Z$10); "";NDICE($C$3:$C$13;MENOR(SE ($B$3:$B$13=$Z$10;LIN($B$3:$B$13) -LIN($B$3)+1;FALSO); COLS($A:A)))) (frmula matricial)

Note que a nica alterao que foi feita foi trocar LINS($1:1) da frmula no formato anterior por COLS($A:A) . Abaixo h a explica da frmula na primeira forma, se tiver dvida em como aplicar dessa segunda forma, me envie um e-mail.

Explicao

Nota: Para melhor entendimento, considere que estamos avaliando a frmula usando o exemplo acima na clula D17 . Logo, estarem fazendo o passo a passo para essa frmula que buscar a terceira correspondncia com o valor Felipe, j que a primeira e segunda correspondncias j foram retornadas nas duas linhas superiores com a mesma frmula, mas referncia alterada. Em primeiro lugar, voc deve ter percebido que se todas as correspondncias da frmula j foram mostradas, a mesma retorna seja, vazio. Observe a regio destacada abaixo: =SE(LINS($1:3)>CONT.SE($B$3:$B$13;$B$15);"";NDICE(...

Nota-se pela referncia relativa em LINS($1:3) que medida que se cola a frmula para baixo, vai-se de LINS($1:1) , LINS($1:2 LINS($1:3) e assim por diante. O resultado de cada uma dessas frmulas igual a, respectivamente, 1 , 2 e 3 . uma forma da frm armazenar quantos resultados j foram encontrados.

Se o nmero de resultados encontrados for maior que o nmero de ocorrncias de Felipe (que calculado pela frmula CONT.SE($B$3:$B$13;$B$15) ), ento todas as correspondncias j foram encontradas e ento a frmula retorna "", ou seja, Caso contrrio, deve-se retornar o parmetro NDICE(... clula. Resumindo: nessa frmula este primeiro SE tem a funo de retor vazio "" se todas as ocorrncias do " PROCV" j foram encontradas. Da frmula restante, o trecho que retorna qual a prxima correspondncia : NDICE(D$3:D$13;MENOR(SE($B$3:$B$13=$B$15;LIN($B$3:$B$13)-LIN(C$3)+1;FALSO);LINS($1:3))) Ou seja, buscaremos o NDICE nmero 10 do vetor D$3:D$13 , que corresponde ocorrncia Vermelho j que os ndices 1 ( (Azul) j foram retornados pela frmula nas linhas de cima (observe que, nesse vetor, o ndice 1 = Verde, 2 = Amarelo, 3 = Azul Branco e assim por diante). O clculo do NDICE retornado no vetor ento dado por: MENOR(SE($B$3:$B$13=$B$15;LIN($B$3:$B$13)-LIN(C$3)+1;FALSO);LINS($1:3))

A frmula acima diz que o NDICE o terceiro MENOR valor no vetor em azul (no se esquea que estamos avaliando a frmula e D17 , ou seja, para se buscar a terceira ocorrncia de uma Cor para Felipe). Essa parte a mais importante da frmula: observe que o vetor ao qual a funo MENOR l formado a partir da funo SE SE($B$3:$B$13=$B$15;LIN($B$3:$B$13)-LIN(C$3)+1;FALSO)

O objetivo dessa parte da frmula criar um vetor numrico crescente do tipo {1;2;3;4;...;n} do tamanho do vetor de procura, que nosso caso {1;2;3;4;5;6;7;8;9;10;11} . A expresso LIN($B$3:$B$13)-LIN(C$3)+1 se encarrega de fazer isso. No entanto, faz-se algumas modificaes nesse vetor: para os elementos que no possuem a correspondncia $B$3:$B$13 o valor FALSO atribudo no lugar do nmero. Logo, nosso vetor ficar: {1;FALSO;3;FALSO;FALSO;FALSO;FALSO;FALSO;FALSO;10;11}

Ora, a funo MENOR est ajustada para retornar o terceiro menor valor, que 10 . Logo, o NDICE nmero 10 do vetor D$3:D$13 elemento Vermelho, que corresponde terceira correspondncia do vetor para o valor de busca Felipe.

Por ltimo, entenda a construo do vetor LIN($B$3:$B$13)-LIN(C$3)+1 , citado anteriormente conforme. Considere a express abaixo, reescrita em outras cores: LIN($B$3:$B$13)-LIN(C$3)+1 Sabe-se que a funo LIN retorna o nmero da linha de uma referncia. Observe como se chega ao resultado desejado:

www.ambienteoffice.com.br/excel/retornar_todas_as_correspondencias_de_um_PROCV/

3/5

24/05/13

Retornar Todas as Correspondncias de um PROCV - Excel - Ambiente Office

Retornar Correspondncias numa nica Clula


Suponha, no exemplo acima, que voc deseje retornar todas as correspondncias numa nica clula:

Veja que todas as correspondncias esto sendo retornadas numa nica clula atravs de uma UDF (pretendo escrever mais sobre UDFs em breve) chamada PROCVCONCAT. Ela semelhante ao PROCV (clique aqui para aprender a usar o PROCV), exceto que el no possui o ltimo parmetro e retorna todas as correspondncias na mesma clula. A declarao da UDF : Function PROCVCONCAT(sProcura As String, vBD As Variant, lngOffset As Long)

Basicamente, a funo faz um lao na primeira coluna da matriz vBD buscando o termo sProcura, e concatena uma correspondncia coluna lngOffset de distncia do elemento encontrado no vetor. Logo, a frmual fica como: =PROCVCONCAT(F2;$B$3:$D$13;3) O cdigo dessa UDF :

F u n c t i o nP R O C V C O N C A T ( s P r o c u r aA sS t r i n g ,v B DA sV a r i a n t ,l n g O f f s e tA sL o n g ) ' A l t e r ee s s ac o n s t a n t es eq u i s e ru t i l i z a ro u t r oc a r a c t e r ec o m od g i t os e p a r a d o r . C o n s ts t r S e p a r a d o rA sS t r i n g=" ; " D i mlA sL o n g D i ml n g T o t a lA sL o n g D i ms t r T e m p ( )A sS t r i n g D i mv a r T e m pA sV a r i a n t ' T r a n s f o r m oop a r m e t r od ee n t r a d a( q u ep o d es e ru m am a t r i zo uu m aR a n g e )p a r at r a b a l h a r ' a p e n a sc o mu m aV a r i a n t : v a r T e m p=C V a r ( v B D ) F o rl=L B o u n d ( v a r T e m p ,1 )T oU B o u n d ( v a r T e m p ,1 ) I fv a r T e m p ( l ,1 )=s P r o c u r aT h e n ' F o ie n c o n t r a d au m ac o r r e s p o n d n c i an ap r i m e i r ac o l u n ad ov e t o rd ev a r T e m p . l n g T o t a l=l n g T o t a l+1 R e D i mP r e s e r v es t r T e m p ( 1T ol n g T o t a l ) s t r T e m p ( l n g T o t a l )=v a r T e m p ( l ,l n g O f f s e t ) E n dI f N e x tl I fI s A r r a y E m p t y ( s t r T e m p )T h e n ' C a s on os e j ae n c o n t r a d an e n h u m ac o r r e s p o n d n c i a ,af u n or e t o r n a r u m ac l u l av a z i a . P R O C V C O N C A T=" " E x i tF u n c t i o n E l s e ' J o i nc o n c a t e n at o d a sa sc o r r e s p o n d n c i a se n c o n t r a d a sd ov e t o rs t r T e m p : P R O C V C O N C A T=J o i n ( s t r T e m p ,s t r S e p a r a d o r ) E n dI f E n dF u n c t i o n F u n c t i o nI s A r r a y E m p t y ( vA sV a r i a n t )A sB o o l e a n
www.ambienteoffice.com.br/excel/retornar_todas_as_correspondencias_de_um_PROCV/ 4/5

24/05/13

F u n c t i o nI s A r r a y E m p t y ( vA sV a r i a n t )A sB o o l e a n ' R e t o r n aT r u es eu mv e t o rf o rv a z i o . O nE r r o rR e s u m eN e x t I fL B o u n d ( v )< =U B o u n d ( v )T h e n I s A r r a y E m p t y=F a l s e E n dI f I fE r r . N u m b e r>0T h e nI s A r r a y E m p t y=T r u e E n dF u n c t i o n

Retornar Todas as Correspondncias de um PROCV - Excel - Ambiente Office

Referncias
Para fazer o download de um exemplo pronto (Pasta de Trabalho), clique aqui.

--Site de Felipe Costa Gualberto. Belo Horizonte, Brasil, 2009-2013 . benzadeus5@ambienteoffice.com.br

www.ambienteoffice.com.br/excel/retornar_todas_as_correspondencias_de_um_PROCV/

5/5

Das könnte Ihnen auch gefallen