Формула на Excel: Брой ден от седмицата между датите -

Съдържание

Обща формула

=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(start&":"&end)))=dow))

Обобщение

За да броите делничните дни (понеделник, петък, неделя и т.н.) между две дати, можете да използвате формула за масив, която използва няколко функции: SUMPRODUCT, WEEKDAY, ROW и INDIRECT. В показания пример формулата в клетка E6 е

=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(B6&":"&C6)))=D6))

В общата версия на формулата начало = начална дата, край = крайна дата и dow = ден от седмицата.

Обяснение

В основата си тази формула използва функцията WEEKDAY, за да тества редица дати, за да се види дали кацат в даден ден от седмицата (падение) и функцията SUMPRODUCT, за да изчисли общата сума.

Когато се даде дата, WEEKDAY просто връща число между 1 и 7, което съответства на определен ден от седмицата. При настройки по подразбиране 1 = неделя и 7 = събота. И така, 2 = понеделник, 6 = петък и т.н.

Номерът на тази формула е разбирането, че датите в Excel са само серийни номера, които започват на 1 януари 1900 г. Например 1 януари 2016 г. е сериен номер 42370, а 8 януари е 42377. Датите в Excel изглеждат само като дати, когато се прилага формат на номер на дата.

И така, въпросът става - как можете да конструирате масив от дати, които можете да подадете във функцията WEEKDAY, за да разберете съответните дни от седмицата?

Отговорът е да се използва ROW с INDIRECT функции по следния начин:

ROW(INDIRECT(date1&":"&date2))

INDIRECT позволява обединените дати "42370: 42377" да бъдат интерпретирани като номера на редове. Тогава функцията ROW връща масив като този:

(42370;42371;42372;42373;42374;42375;42376;42377)

Функцията WEEKDAY оценява тези числа като дати и връща този масив:

(6;7;1;2;3;4;5;6)

което се тества спрямо дадения ден от седмицата (6 в случая от D6). След като резултатите от теста се преобразуват в 1s и 0s с двойното тире, този масив се обработва от SUMPRODUCT:

(1;0;0;0;0;0;0;1)

Което връща 2.

Със СЕКВЕНЦИЯ

С новата функция SEQUENCE тази формула може да се опрости донякъде по следния начин:

=SUMPRODUCT(--(WEEKDAY(SEQUENCE(end-start+1,1,start,1))=dow))

В тази версия ние използваме SEQUENCE, за да генерираме масива от дати директно, без да има нужда от INDIRECT или ROW.

Интересни статии...