Excel-formel: Telle ukedag mellom datoer -

Innholdsfortegnelse

Generisk formel

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

Sammendrag

For å telle hverdager (mandager, fredager, søndager osv.) Mellom to datoer, kan du bruke en matriseformel som bruker flere funksjoner: SUMPRODUCT, WEEKDAY, ROW og INDIRECT. I eksemplet vist er formelen i celle E6

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

I den generiske versjonen av formelen, start = startdato, slutt = sluttdato og dow = ukedag.

Forklaring

I kjernen bruker denne formelen WEEKDAY-funksjonen til å teste et antall datoer for å se om de lander på en gitt ukedag (dow) og SUMPRODUCT-funksjonen for å telle opp totalen.

Når en dato blir gitt, returnerer WEEKDAY ganske enkelt et tall mellom 1 og 7 som tilsvarer en bestemt ukedag. Med standardinnstillinger er 1 = søndag og 7 = lørdag. Så, 2 = mandag, 6 = fredag, og så videre.

Trikset med denne formelen er å forstå at datoer i Excel bare er serienumre som begynner 1. januar 1900. For eksempel er 1. januar 2016 serienummeret 42370, og 8. januar er 42377. Datoer i Excel ser bare ut som datoer når et datonummerformat brukes.

Så spørsmålet blir - hvordan kan du lage en rekke datoer som du kan mate inn i WEEKDAY-funksjonen for å finne ut tilsvarende dager i uken?

Svaret er å bruke ROW med INDIREKTE funksjoner slik:

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

INDIRECT lar de sammenkoblede datoene "42370: 42377" tolkes som radnumre. Deretter returnerer ROW-funksjonen en matrise som dette:

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

WEEKDAY-funksjonen evaluerer disse tallene som datoer og returnerer denne matrisen:

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

som er testet mot den gitte ukedagen (6 i dette tilfellet fra D6). Når resultatene av testen er konvertert til 1s og 0s med dobbelt bindestrek, blir denne matrisen behandlet av SUMPRODUCT:

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

Som returnerer 2.

Med SEKVENS

Med den nye SEQUENCE-funksjonen kan denne formelen forenkles noe slik:

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

I denne versjonen bruker vi SEQUENCE til å generere dataarrisen direkte, uten behov for INDIRECT eller ROW.

Interessante artikler...