quarta-feira, 29 de abril de 2020

ÍNDICE + CORRESP com Múltiplios Critérios

Quando temos uma tabela com mais de uma informação nas linhas ou nas colunas, pode surgir uma dúvida em como prosseguir com as funções de busca. Vejamos o caso abaixo, por exemplo:


Aqui, temos a evolução histórica do preço por quilograma para cada "Loja" e "Produto". Muitas vezes, fazemos uso das funções ÍNDICE e CORRESP quando temos apenas uma informação no início das linhas e outra no topo das colunas, mas como buscar o preço do kg do tomate na loja B no dia 29/fev/2020 com uma expressão?


Podemos aplicar as funções ÍNDICE e CORRESP de duas formas:

{=ÍNDICE(C2:F7;CORRESP(1;(A2:A7=H2)*(B2:B7=I2);0);CORRESP(J2;C1:F1;0))}
(por verificação booleana)

ou

{=ÍNDICE(C2:F7;CORRESP(H2&I2;A2:A7&B2:B7;0);CORRESP(J2;C1:F1;0))}
(por concatenação)

Em ambos os casos, no primeiro argumento da função ÍNDICE, é indicada a matriz de valores, que seria o conjunto C2:F7 e, no terceiro argumento, a função CORRESP é aplicada de forma usual, buscando a data (J2) no intervalo C1:F1 com correspondência exata, retornando 2, uma vez que 29/fev/2020 é a 2ª data do cabeçalho.

Método Booleano


No primeiro caso, foi utilizada a lógica booleana, onde as igualdades entre os cabeçalhos e os valores pretendidos retornam vetores com 0 e 1. Neste caso:

(A2:A7=H2)={FALSO;FALSO;FALSO;VERDADEIRO;VERDADEIRO;VERDADEIRO}
verifica a correspondência do campo "Loja"

(B2:B7=I2)={VERDADEIRO;FALSO;FALSO;VERDADEIRO;FALSO;FALSO}
verifica a correspondência do campo "Produto"

E o resultado do produto será 1 somente na posição em que há VERDADEIRO em ambos os vetores acima:

(A2:A7=H2)*(B2:B7=I2)={0;0;0;1;0;0}

Com a função CORRESP, buscando o valor 1 no  intervalo acima, obtém-se 4, que corresponde à posição da linha em que a loja é B e o produto é tomate. Assim, a função ÍNDICE buscará o elemento na 4ª linha e 2ª coluna da matriz C2:F7, ou seja, o preço de 5,49 por quilograma.

Concatenação


Outra forma de resolver este problema seria concatenando os campos "Loja" e "Produto". Desta forma, ao invés de buscar "B" no campo "Loja" e "Tomate" no campo "Produto" separadamente, buscamos "BTomate" no vetor resultante da junção de "Loja"&"Produto". Nas expressões:

H2&I2="BTomate"

e

A2:A7&B2:B7={"ATomate";"APepino";"ARabanete";"BTomate";"BPepino";"BRabanete"}

Sendo equivalente somente na posição 4 (resultado do CORRESP) e fazendo com que a função ÍNDICE retorne 5,49 também.

Para ter acesso aos dados deste exemplo, clique aqui.

Tem alguma dúvida, crítica ou sugestão? Comente aí embaixo!

Um comentário: