Excel-formel: Räkna veckodag mellan datum -

Innehållsförteckning

Generisk formel

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

Sammanfattning

För att räkna vardagar (måndagar, fredagar, söndagar etc.) mellan två datum kan du använda en matrisformel som använder flera funktioner: SUMPRODUKT, VECKODAG, RAD och INDIREKT. I exemplet som visas är formeln i cell E6

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

I den generiska versionen av formeln, start = startdatum, slut = slutdatum och dow = veckodag.

Förklaring

I grunden använder denna formel WEEKDAY-funktionen för att testa ett antal datum för att se om de landar på en viss veckodag (dow) och SUMPRODUCT-funktionen för att räkna upp summan.

När ett datum ges, returnerar WEEKDAY helt enkelt ett tal mellan 1 och 7 som motsvarar en viss veckodag. Med standardinställningar är 1 = söndag och 7 = lördag. Så, 2 = måndag, 6 = fredag ​​och så vidare.

Tricket med denna formel är att förstå att datum i Excel bara är serienummer som börjar den 1 januari 1900. Till exempel är 1 januari 2016 serienumret 42370 och 8 januari är 42377. Datum i Excel ser bara ut som datum när ett datumnummerformat tillämpas.

Så frågan blir - hur kan du skapa en matris med datum som du kan mata in i WEEKDAY-funktionen för att ta reda på motsvarande veckodagar?

Svaret är att använda ROW med INDIRECT-funktioner så här:

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

INDIRECT tillåter att de sammanhängande datumen "42370: 42377" tolkas som radnummer. Då returnerar ROW-funktionen en matris så här:

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

WEEKDAY-funktionen utvärderar dessa siffror som datum och returnerar denna array:

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

som testas mot den angivna veckodagen (6 i detta fall från D6). När testresultaten har konverterats till 1s och 0s med dubbel bindestreck bearbetas denna array av SUMPRODUCT:

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

Vilket returnerar 2.

Med SEKVENS

Med den nya SEQUENCE-funktionen kan denna formel förenklas ungefär så här:

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

I den här versionen använder vi SEQUENCE för att generera datumuppsättningen direkt, utan behov av INDIRECT eller ROW.

Intressanta artiklar...