Вот решение, состоящее из нескольких шагов, при условии, что вы можете сделать это вручную, и вам не нужно ни одного полностью автоматизированного решения: (и если вы это сделаете, я уверен, что вы можете взять его отсюда ...)
- Excel не является базой данных.
- Сбросить все данные на один лист. (Для примера, я предполагаю, что у вас есть UID в столбце A, DATE в столбце B и STATUS в C).
- На втором листе выполните команду « Удалить дубликаты» только для столбца UID. (например, копировать только отфильтрованные уникальные файлы или скопировать весь столбец, а затем выполнить стандартное удаление дубликатов).
В столбце DATE добавьте следующую формулу Array *:
{= MAX (IF (Технический паспорт!A: A = A1, DataSheet!В: В))}
Это в основном выбирает самую последнюю дату для каждого UID. (Это для первой строки, конечно, убедитесь, что все остальные строки заполнены A1, A2, ... )
В столбце СОСТОЯНИЕ добавьте следующую формулу массива:
{= INDEX (IF (Технический паспорт!A: A = A1, IF (Технический паспорт!B: B = B1, информационные листки!C: C)), MATCH (TRUE, IF (Технический паспорт!A: A = A1, IF (Технический паспорт!В: В = В1, TRUE)), 0))}
(Снова обратите внимание на первый ряд, заполните остальные).
Этот более сложный, давайте разберем его:
IF(Технический паспорт!A:A = A1, IF(Технический паспорт!B:B = B1, информационные листки!С: С))
Эта формула массива просто выполняет эквивалент предложения SQL WHERE с двумя условиями: для всех строк, которые соответствуют как UID (столбец A), так и DATE (столбец B), вернуть значение строки в столбце C (STATUS).
MATCH(TRUE, IF(Технический паспорт!A:A = A1, IF(Технический паспорт!В: В = В1, TRUE)), 0)
Первая формула должна была быть достаточно хорошей, но, поскольку у нас нет способа извлечь только ненулевое (или ненулевое) значение, а в Excel нет формулы COALESCE, нам нужно немного прибегнуть к Косвенная.
Формула MATCH ищет массив, возвращаемый IF (те же условия, что и выше, но просто возвращает TRUE, если это совпадение), для первого значения TRUE. 3 параметр, 0, требует точного соответствия.
Эта формула просто возвращает индекс первой и единственной строки, которая соответствует предыдущим условиям (соответствует UID и DATE (которая была максимальной датой, соответствующей UID)).
{= ИНДЕКС (ЕСЛИ (см. Выше), МАТЧ (см. Выше))}
Теперь достаточно просто взять индекс совпадающей строки из MATCH и извлечь соответствующее значение STATUS из массива IF. Это возвращает единственное значение, ваш новый STATUS, который гарантированно (если вы сделали все эти шаги правильно) будет иметь самую последнюю дату для каждого UID.
6 Excel не является базой данных.
* FOOTNOTE: если вы не знакомы с формулами Array (хотя я думаю, что вы есть), посмотрите на это: в основном вы вводите исходную формулу, которая должна привести к массиву значений (без волнистости {}), затем нажмите CTRL+SHIFT+ENTER. Excel добавляет за вас волнистый {} и вычисляет все значения в виде массива.
* СНОСКА № 2: Серьезно, EXCEL НЕ БАЗА ДАННЫХ. ;-)