Pesquisa do Excel entre datas

1

Eu tenho uma planilha que lista cada cliente e a data em que o status deles foi alterado. por exemplo,

Client_Name   Transaction_Date    Status

ClientA       1/1/2017            Level_1

ClientB       2/1/2017            Level_2

ClientA       3/1/2017            Level_3

No exemplo anterior, o ClientA tem o status Level_1 de 1/1/2017 a 2/28/2017 e o status Level_3 em diante. Eu quero construir uma pesquisa que leva o nome do cliente e uma data e retorna o status nessa data. Então a saída desejada seria:

Client_Name   Evaluation_Date    Status

ClientA       1/1/2016            NA/ERROR

ClientA       1/2/2017            Level_1

ClientA       3/2/2017            Level_3

As soluções VBA também estão bem. Algo sem uma fórmula de matriz seria ideal, uma vez que isso seria executado em uma tabela muito grande, mas percebo que isso pode não ser possível.

    
por learningAsIGo 17.11.2017 / 02:14

2 respostas

3

Com base no que entendo melhor sua pergunta, sugiro uma solução com base na suposição de que sua Data de Transação (pelo menos para o mesmo Cliente) está em Ordem Crescente. Se não, Classifique sua tabela primeiro no nome do cliente e, em seguida, na data da transação. Além disso, deixe pelo menos uma célula acima dos dados, já que o número da linha é referido na solução. Experimente esta solução e reverta se isso funcionar ou não.

Neste exemplo, a tabela de exemplo está nas células B4: D12. Digite o cliente em E4 e insira a data em F4.

Agora, no G4, insira a seguinte fórmula e pressione CTRL + SHIFT + ENTER de dentro da barra de fórmulas para criar a função Array.

=IF(MAX(IF(1=IF(F4>=IF($B$4:$B$12=E4,$C$4:$C$12,2958352),1,0),ROW($C$4:$C$12)-ROW($C$3),0))=0,"Not Found",INDEX($D$4:$D$12,MAX(IF(1=IF(F4>=IF($B$4:$B$12=E4,$C$4:$C$12,2958352),1,0),ROW($C$4:$C$12)-ROW($C$3),0))))

Ao inserir o nome e a data do cliente em E4 & F4, G4 deve mostrar o nível relevante. Se a data for anterior à data de início do nível, será exibido o código "Não encontrado".

    
por 17.11.2017 / 11:30
0

A única solução que eu poderia encontrar era com um array, embora possa não ser diretamente sua escolha preferida, ainda está lá como opção.

{=IFERROR(VLOOKUP("ClientA"&"1/1/2016",CHOOSE({1,2},A2:A12&B2:B12,C2:C12),2,0),"NA/ERROR")}

Você só precisa alterar "ClientA" e "1/1/2016" para as células que está procurando, A2:A12 & B2:B12 representaria as duas colunas que você está pesquisando, por exemplo, Client_Name & Evaluation_Date

E finalmente C2:C12 é o formulário da coluna que você deseja retornar um valor, no seu caso o status.

    
por 17.11.2017 / 10:37