Исключить ранее вычисленные даты (на основе критериев) из расчета
- Критерий соответствует значению столбца в строке формулы значению этого столбца для рассмотренных дат.
- Рассматриваемые даты - это все те даты, которые предшествуют текущей строке.
- Диапазоны дат включительно
- Со вчерашнего дня до сегодняшнего дня - 2 дня, если вчера не использовался вчера для расчета дней (для этого критерия - Emp #), в этом случае это будет 1 день.
Формула:
=DAYS(E4,MAX(IF(A4=$A$3:$A3,$E$3:$E3),D4))+IF(MAX(IF(A4=$A$3:$A3,$E$3:$E3))<D4,1,0)
- Вставить в G4
- CSE - Ctrl - Shift - Введите эту формулу массива.
- Копировать перетащите вниз.
Расширяющиеся диапазоны
- И $ A $ 3: $ A3, и $ E $ 3: $ E3 расширяют диапазоны значений, которые были до этого.
- Абсолютный адрес строки
$3
и относительный адрес строки 3
должны быть строкой над началом формулы.
- Повышение эффективности путем перезапуска формулы (возможно, через каждые 1–5 тыс. Строк).
- Требуется, чтобы данные были отсортированы по сотруднику, а затем (по формуле, как предполагается, предполагается) отсортированы по дате для любого сотрудника по найму.
- Всегда перезапускайте формулу в начале сотрудника.
- Диапазон расширения должен ссылаться на последнюю запись предыдущего сотрудника.
- Одна правка для перезапуска формулы: Измените абсолютные ссылки на строки (в перезапущенной формуле), чтобы они совпадали с существующими относительными ссылками на строки для каждого расширяющегося диапазона (их четыре).
Пример перезапуска:
OLD =DAYS(E10,MAX(IF(A10=$A$3:$A9,$E$3:$E9),D10))+IF(MAX(IF(A10=$A$3:$A9,$E$3:$E9))<D10,1,0)
NEW =DAYS(E10,MAX(IF(A10=$A$9:$A9,$E$9:$E9),D10))+IF(MAX(IF(A10=$A$9:$A9,$E$9:$E9))<D10,1,0)
. ^ = ^ = ^ = ^ =
- В строке 10 значение
^
становится значением =
для всех 4 ^
.
- CSE и скопируйте перетащите вниз перезапущенную формулу.
Объяснение
- Рассчитать дни как конец - начало и, возможно, добавить один.
- Конец столбца
E
.
- Начало - максимальная дата, которую можно увидеть для этого сотрудника.
- В max указывается дата начала в столбце
D
, а также все ПРЕДЫДУЩИЕ даты окончания этого сотрудника (max не учитывает дату окончания строки формулы).
- Добавьте один день, если максимальное количество предыдущих дней меньше этой даты начала.
- Это означает, что дата начала еще не была включена в счет.
- Если предыдущая конечная дата была такой же, как и начальная, то в этом расчете будет учтён соответствующий день в подсчете.
- Если предыдущая дата окончания была более поздней, чем текущая дата начала, то перекрытие, включая эту дату начала, уже было включено в предыдущий расчет.
Функция MAX в функции DAYS будет использовать эту дату окончания в качестве даты начала при расчете дней.