Дни между датами (условие должно быть проверено на совпадение дат) - PullRequest
0 голосов
/ 07 марта 2019

Sample image
sample image 2

3rd Image

Мне нужна формула для расчета дней между двумя датами.Дата отъезда 02/06/2018, дата прибытия 03/06/2018, следовательно, мой ответ будет 2 дня, который включает в себя дату отъезда, как мудрый, если какие-либо даты повторяются в последующих ячейках, которые не должны быть подсчитаны, то есть расчет дней должен бытьсделано только для определенных дат.Пожалуйста, предложите формулу для расчета этого согласно приложенному изображению.У меня 3000 сотрудников и более 35 тыс. Строк данных, подобных этой.

Пример изображения 2 показывает расчет за 3 дня, выполненный для 18 октября и 3 дня для 18 ноября, что означает, что я рассчитал только 3 дня за октябрь месяца, хотя поездка былазаключенный nov18, тогда я считал даты путешествия nov18 только на ноябрьский месяц.

1 Ответ

0 голосов
/ 22 марта 2019

Исключить ранее вычисленные даты (на основе критериев) из расчета

  • Критерий соответствует значению столбца в строке формулы значению этого столбца для рассмотренных дат.
  • Рассматриваемые даты - это все те даты, которые предшествуют текущей строке.
  • Диапазоны дат включительно
    • Со вчерашнего дня до сегодняшнего дня - 2 дня, если вчера не использовался вчера для расчета дней (для этого критерия - Emp #), в этом случае это будет 1 день.

sample

Формула:

=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 будет использовать эту дату окончания в качестве даты начала при расчете дней.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...