Pesquisa baseada em três critérios

3

Eu tenho esta folha.

EuqueropesquisarovalordeExecução(%)combaseemtrêscritérios:Ano,SemanaeMáquina.Então,euquerodizerapesquisaparaprocurarAno:2018,Semana:2,Machine:Filler,eudeveriapegaronúmero100%.EuquerofazeromesmoparaadataCILT,Duration(%)eScore.

OVLOOKUPparecemuitolimitadoparaessetipodecoisa.

AsinformaçõessobreINDEXeMATCHqueencontreinãoestãobemexplicadas.

OVLOOKUPpodefazerisso?Senão,qualéocaminhopararecuperarosvaloresdesejados?

Eutenhoessafórmula

=ÍNDICE('DadosL5'!M5:M15,SUMPRODUCT(-('DadosL5'!A5:A15="2018") ('Dados L5'! B5: B15="2") ('L5 Data'! F5: F15="Filler") * ROW ('L5 Data'! 5: 15)))

Mas retorna o valor uma linha abaixo. Em outras palavras, para o ano: 2018, semana: 2, Machine: Filler, ele retorna 81,8% em vez de 100%. Qual poderia ser o motivo?

    
por user823527 15.01.2018 / 01:05

3 respostas

1

Você fez três perguntas.

Um é: "O VLOOKUP () pode ser usado para fazer isso?" Miroxlav postou uma excelente resposta mostrando como fazer isso usando uma coluna auxiliar.

Sua segunda pergunta pergunta como obter o resultado desejado e a terceira pergunta qual pode ser o motivo da sua fórmula atual retornar a resposta errada. Vou tentar responder os dois últimos.

Sua fórmula está muito próxima de funcionar corretamente. Vamos fazer uma solução de problemas para descobrir o que está errado.

Primeiro, sua fórmula tem alguns erros de digitação - o sinal de multiplicação está faltando em dois lugares entre parênteses. O Excel sugeriu uma correção para isso, e eu removi as referências da folha de dados ('L5 Data'!) Para simplificar:

=INDEX(M5:M15,SUMPRODUCT(--(A5:A15="2018")*(B5:B15="2")*(F5:F15="Filler")*ROW(5:15)))

O Excel tem um recurso de solução de problemas interno você pode destacar parte de uma fórmula na barra de fórmulas e digitar F9 para ver o valor da parte destacada da fórmula.

Clique na célula que contém sua fórmula e, em seguida, destaque a expressão (A5: A15="2018") na barra de fórmulas e pressione F9 (tecla de função 9). Você verá uma matriz contendo todos os valores FALSE . Isto diz que nenhuma célula em A5: A15="2018". Isso é porque você tem 2018 entre aspas. Se você remover as aspas e tentar novamente, obterá a matriz {TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE} , que é o que você espera - as primeiras 5 células no intervalo são = 2018.

O mesmo problema existe na segunda expressão - remova as marcas de aspas em torno de 2 em (B5:B15="2") . A terceira expressão (F5:F15="Filler") precisa das aspas, porque "Preenchimento" é texto em vez de um número.

Agora destaque (A5:A15=2018)*(B5:B15=2)*(F5:F15="Filler") e clique em F9. Você verá o resultado é {0;0;0;1;0;0;0;0;0;0;0} . O que aconteceu aqui? Multiplicar matrizes de valores lógicos converte valores de True / False em 1 e 0 e também executa o equivalente do AND () lógico. Portanto, este resultado diz que há apenas uma posição no intervalo de linhas 5:15, onde a coluna A é 2018, a coluna B é 2 e a coluna F é "Filler". E essa posição é a quarta.

Em seguida, sua fórmula multiplica essa matriz multiplicando a matriz dos números de linha 5:15. Usando F9, você pode ver esse resultado - {0;0;0;8;0;0;0;0;0;0;0} . Agora, SUMPRODUCT () adiciona os elementos dessa matriz e retorna um resultado de 8, que é o número da linha em que todas as três condições são verdadeiras. Mais uma vez, você pode ver esse resultado usando F9.

E agora aqui está o problema principal - após esses cálculos intermediários, sua fórmula é: =INDEX(M5:M15,8) , que retorna o oitavo elemento do intervalo M5: M15. Mas você não quer o oitavo elemento, você quer o quarto, porque o intervalo M5: M15 começa na linha 5, e 100% está na quarta célula no intervalo M5: M15.

Portanto, a solução é subtrair 4 do SUMPRODUCT ():

=INDEX(M5:M15,SUMPRODUCT((A5:A15=2018)*(B5:B15=2)*(F5:F15="Filler")*ROW(5:15))-4)

Isso retorna o resultado correto - 100%.

Notas:

  1. Eu não consegui fazer sua fórmula retornar 81,8%, não importa o quanto eu tentei.
  2. O duplo negativo unário (-) em sua fórmula não é necessário. Geralmente é usado para converter matrizes lógicas em 1's e 0 ', mas a multiplicação das matrizes realiza isso.

Espero que isso ajude. As alterações que descrevi permitem que sua fórmula funcione corretamente. Use a resposta do Miroxlav se você quiser usar o VLOOKUP (). Boa sorte.

    
por 15.01.2018 / 23:40
1

Sim, VLOOKUP () pode fazer isso, trazendo o único valor necessário (se precisar de uma soma, use SUMIF ()).
Nesses casos, geralmente criei e usei uma chave composta para VLOOKUP ().
No seu caso, essa chave simplesmente contém valores de todas as três colunas. Ele permite que você especifique critérios de pesquisa usando três colunas.

Detalhes:

  1. Insira a coluna A com cabeçalho Ano | Mês | Máquina e fórmula (para A5)

    =B5 & "|" & C5 & "|" & D5
    

    Assim, para o A5, ele será avaliado em 2018|1|Filler .

  2. Em seguida, espalhe a fórmula para baixo.

  3. Sempre que você quiser fazer uma pesquisa, monte a mesma chave e execute VLOOKUP (), por exemplo:

    =VLOOKUP("2018|2|Filler", A5:R9999, 8, FALSE)
    
    • Ajuste a expressão pesquisada para o que você deseja, por exemplo 2018|1|Labeler ou montá-lo a partir de valores em outras células.
    • Ajuste o intervalo de dados A5:R9999 para o atual.
    • Ajuste o valor 8 para corresponder à coluna Execution (%) , contando a partir da coluna esquerda do intervalo acima.

Depois de obter esse trabalho, você também pode criar o mecanismo semelhante para a pesquisa com base nas outras três colunas. Basta adicionar outra coluna à esquerda dos mesmos dados. (Razão: VLOOKUP () espera coluna de pesquisa como o mais à esquerda.)

Nota: Normalmente, é importante ter um separador (no exemplo acima eu usei | ) para manter as chaves exclusivas. Caso contrário, 2018 , 10 , Filler e 2018 , 1 , 0Filler criará a mesma chave que está obviamente incorreta. Para o separador, use o caractere não presente nos valores.

ATUALIZAÇÃO: Esta solução funciona. Nos comentários abaixo, foram mencionados alguns problemas e estes agora são corrigidos ou pontos tornados mais claros. Obrigado a Rajesh pela revisão.

    
por 15.01.2018 / 10:53
0

Sua fórmula deve ser assim,

{=INDEX(K$96:K$100,SUMPRODUCT(($D$96:$D$100="2018")*($E$96:$E$100=2)*($I$96:$I$100="Filler")*ROW($96:$100)))}

NB: apenas Você precisa colocar o sinal "*" entre todos os intervalos de dados e não usar "- -" após o SUMPRODUCT.

Observação: é Fórmula CSE para terminar com Ctrl + Shift + Enter .

Além disso, use seu intervalo de dados no lugar do meu.

Espero que isso ajude você.

    
por 15.01.2018 / 10:33