Aqui está uma solução de vários passos, supondo que você possa fazer isso manualmente, e não precisa de uma única solução totalmente automatizada: (e se você fizer isso, tenho certeza que você pode tirá-la daqui ... )
- O Excel não é um banco de dados.
- Descarregue todos os dados em uma única folha. (Por exemplo, estou assumindo que você tem UID na coluna A, DATE na coluna B e STATUS em C).
- Em uma segunda planilha, execute Remover duplicatas na coluna UID somente . (por exemplo, copie apenas os únicos filtrados ou copie toda a coluna e, em seguida, execute um padrão Remover Duplicatas).
-
Na coluna DATE, adicione a seguinte fórmula da Matriz *:
{=MAX(IF(DataSheet!A:A=A1, DataSheet!B:B))}
Isso basicamente seleciona a data mais recente para cada UID. (Isso é para a primeira linha do curso, certifique-se de preencher todo o resto das linhas com A1, A2, ...)
-
Na coluna STATUS, adicione a seguinte fórmula de matriz:
{=INDEX(IF(DataSheet!A:A=A1,IF(DataSheet!B:B=B1,DataSheet!C:C)),MATCH(TRUE,IF(DataSheet!A:A=A1,IF(DataSheet!B:B=B1,TRUE)),0))}
(note novamente a primeira linha, preencha o resto).
Este é mais complexo, vamos dividi-lo:
IF(DataSheet!A:A=A1,IF(DataSheet!B:B=B1,DataSheet!C:C))
Essa fórmula de matriz simplesmente executa o equivalente a uma cláusula SQL WHERE com duas condições: para todas as linhas que correspondem a UID (coluna A) e DATE (coluna B), retorne o valor da linha na coluna C (STATUS).
MATCH(TRUE,IF(DataSheet!A:A=A1,IF(DataSheet!B:B=B1,TRUE)),0)
A primeira fórmula deve ter sido boa o suficiente, mas como não temos uma maneira de extrair apenas o valor não-nulo (ou não-FALSE), e o Excel não tem um Fórmula COALESCE, precisamos recorrer a um pouco de indirecção.
A fórmula MATCH procura a matriz retornada pelo IF (mesmas condições acima, mas simplesmente retorna TRUE se for uma correspondência), para o primeiro valor VERDADEIRO. O parâmetro 3, 0, exige uma correspondência exata.
Essa fórmula simplesmente retorna o índice da primeira e única linha que corresponde às condições anteriores (UID e DATE correspondentes (que era a data máxima que corresponde ao UID)).
{=INDEX(IF(see above), MATCH(see above))}
Agora, é bastante simples pegar o índice da linha correspondente da MATCH e extrair o valor STATUS correspondente da matriz IF. Isso retorna um único valor, seu novo STATUS, que é garantido (se você tiver feito todos esses passos corretamente) como sendo da última data para cada UID.
6 O Excel não é um banco de dados.
* FOOTNOTE: se você não estiver familiarizado com as fórmulas do Array (embora eu ache que você é), veja isto : basicamente você insere a fórmula original que deve resultar em uma matriz de valores (sem o squiggly {}), então pressione CTRL + SHIFT + ENTER . O Excel adiciona o squiggly {} para você e calcula todos os valores como uma matriz.
* FOOTNOTE # 2: Sério, O EXCEL NÃO É UM BANCO DE DADOS. ;-)