Формула Excel для возврата самой ранней даты и самой поздней даты в диапазоне дат - PullRequest
0 голосов
/ 29 апреля 2020

ОБНОВЛЕНО образец таблицы ввода и вывода

Пожалуйста, см. Прилагаемое изображение для образца данных (таблица слева) и предполагаемого результата (таблица справа).

Я пытался использовать примеры формул на этом веб-сайте для аналогичных вопросов, но мне не удалось приспособить его к моей конкретной проблеме c. В надежде получить некоторые входные данные и указания, указывающие c для моего случая.

У меня есть 1000 строк данных в таблице, аналогичной показанной на рисунке.

  • Столбец 1 - ИД
  • Столбец 2 - Начальный диапазон
  • Столбец 3 - Конечный диапазон
  • Столбец 4 - Дата начала
  • Столбец 5 - Дата окончания

Я хочу объединить строки, чтобы показать столбцы 1, 4 и 5 на основе перекрывающихся диапазонов дат в столбцах 2 и 3 (т. Е. Объединить строки с перекрытием диапазон дат), чтобы получить таблицу, аналогичную приведенной справа, где отображаются только самые ранние и самые поздние даты для каждой группы.

Для справки ниже приведено то, что я имею до сих пор. Эта формула дает мне все, что мне нужно для второго столбца моего вывода (Дата начала), за исключением того, что она возвращает первое значение, которое соответствует всем критериям, а не возвращает наименьшее значение (не знаю, где добавить функцию MIN в этой формуле).

=IFERROR(INDEX([Start Date],MATCH(1, IF([Start Date]>=[@[Start Range]], IF([Start Date]<=[@[End Range]], IF([Key1]=[@Key1],1),0),0),0)),"")

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2020

MATCH может возвращать только один номер строки, но вам нужен массив всех совпадающих строк, чтобы вы могли выбрать наименьший / наибольший - вам нужна формула массива.

У вас есть несколько критериев, но AND и ИЛИ не работают в формулах массива, поэтому для имитации И и ИЛИ требуется хитрость:

AND(a=b,c=d) и OR(a=b,c=d) обрабатывают a=b и c=d как значения ИСТИНА / ЛОЖЬ, но это так же, как допустимо думать о них как ЛОЖЬ = 0 и ИСТИНА <> 0. Если вы сделаете это, то (a=b)*(c=d) будет таким же, как использование AND, а (a=b)+(c=d) будет таким же, как OR.

Для начала мы используем MIN, чтобы найти наименьший соответствующий элемент. Те, которые соответствуют, являются числами, показанными как даты. А как насчет тех, которые не соответствуют? Нам нужно число больше любой мыслимой даты. Число 2958465 - 31/12/9999 (самая большая дата), поэтому мы можем использовать что-то большее, чем это - мы будем использовать 9999999, который определенно не является действительной датой.

В конце мы используем MAX найти самый большой предмет, который соответствует. Те, которые соответствуют, являются числами, показанными как даты. Для тех, кто не соответствует, нам нужно число меньше любой мыслимой даты. Число 0 является наименьшей допустимой датой, поэтому мы будем использовать -1, что определенно не является допустимой датой.

Итак, формулы массива, которые нам нужно использовать:

Для идентификатора введите эту формулу в G2, а затем скопируйте результат вниз для каждой строки исходных данных:

=A2

Для даты начала поместите эту формулу в H2 и нажмите Control-Shift-Enter вместо просто Enter, а затем скопируйте результат вниз для каждой строки исходных данных:

=MIN(IF((D2>=B:B)*(D2<=C:C)*(A2=A:A)+(E2>=B:B)*(E2<=C:C)*(A2=A:A),D:D,9999999))

Для даты окончания, поместите эту формулу в I2 и нажмите Control-Shift-Enter вместо просто Enter, а затем скопируйте результат вниз для каждой строки Исходные данные:

=MAX(IF((D2>=B:B)*(D2<=C:C)*(A2=A:A)+(E2>=B:B)*(E2<=C:C)*(A2=A:A),E:E,-1))

Когда ячейка была введена как формула массива с помощью Control-Shift-Enter, Excel помещает фигурные скобки вокруг нее, чтобы вы могли сказать, что это формула массива.

Теперь, это не идеально, потому что вы хотели отдельную таблицу результатов без дубликатов, а в этой есть много дубликатов. Вы можете использовать расширенный фильтр для отображения только уникальных значений - у вас есть возможность фильтрации на месте, которая скрывает строки или копирует его в другое место.

Если эта отдельная таблица результатов находится на том же листе, что и исходные данные, фильтрация на месте также скроет строки из исходных данных, поэтому вам может быть лучше поместить эту отдельную таблицу на другой лист.

Если вы фильтруете, копируя в новое место (возможно, только вправо), тогда вы можете просто скрыть столбцы результатов с дубликатами - просто следите, потому что сделанная вами копия - это просто значения, и они не будут автоматически обновление.

...