Formula Excel: conta il giorno della settimana tra le date -

Sommario

Formula generica

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

Sommario

Per contare i giorni della settimana (lunedì, venerdì, domenica, ecc.) Tra due date è possibile utilizzare una formula di matrice che utilizza diverse funzioni: SUMPRODUCT, WEEKDAY, ROW e INDIRECT. Nell'esempio mostrato, la formula nella cella E6 è

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

Nella versione generica della formula, inizio = data di inizio, fine = data di fine e dow = giorno della settimana.

Spiegazione

Fondamentalmente, questa formula utilizza la funzione WEEKDAY per testare un numero di date per vedere se atterrano in un determinato giorno della settimana (dow) e la funzione SUMPRODUCT per calcolare il totale.

Quando viene fornita una data, WEEKDAY restituisce semplicemente un numero compreso tra 1 e 7 che corrisponde a un particolare giorno della settimana. Con le impostazioni predefinite, 1 = domenica e 7 = sabato. Quindi, 2 = lunedì, 6 = venerdì e così via.

Il trucco di questa formula è capire che le date in Excel sono solo numeri seriali che iniziano il 1 gennaio 1900. Ad esempio, 1 gennaio 2016 è il numero di serie 42370 e 8 gennaio è 42377. Le date in Excel assomigliano solo a date quando viene applicato un formato del numero di data.

Quindi, la domanda diventa: come puoi costruire una serie di date che puoi inserire nella funzione WEEKDAY per scoprire i giorni della settimana corrispondenti?

La risposta è usare ROW con le funzioni INDIRECT in questo modo:

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

INDIRETTO consente di interpretare le date concatenate "42370: 42377" come numeri di riga. Quindi la funzione ROW restituisce un array come questo:

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

La funzione WEEKDAY valuta questi numeri come date e restituisce questo array:

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

che viene testato rispetto al giorno della settimana specificato (6 in questo caso, da G6). Una volta che i risultati del test vengono convertiti in 1 e 0 con il doppio trattino, questo array viene elaborato da SUMPRODUCT:

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

Che restituisce 2.

Con SEQUENCE

Con la nuova funzione SEQUENZA, questa formula può essere semplificata in qualche modo in questo modo:

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

In questa versione, usiamo SEQUENCE per generare direttamente l'array di date, senza bisogno di INDIRECT o ROW.

Articoli interessanti...