Formula di Excel: CONTA.SE con intervallo variabile -

Sommario

Per configurare COUNTIFS (o COUNTIF) con un intervallo variabile, è possibile utilizzare la funzione OFFSET. Nell'esempio mostrato, la formula in B11 è:

=COUNTIFS(OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1),"")

Questa formula conta le celle non vuote in un intervallo che inizia da B5 e termina 2 righe sopra la cella in cui si trova la formula. La stessa formula viene copiata e incollata 2 righe sotto l'ultima voce nei dati come mostrato.

Spiegazione

Nell'esempio mostrato, la formula in B11 è:

=COUNTIFS(OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1),"")

Lavorando dall'interno verso l'esterno, il lavoro di impostazione di un intervallo variabile viene svolto dalla funzione OFFSET qui:

OFFSET(B$5,0,0,ROW()-ROW(B$5)-1,1) // variable range

OFFSET ha cinque argomenti ed è configurato in questo modo:

  • riferimento = B $ 5, inizia dalla cella B5, riga bloccata
  • righe = 0, offset zero righe dalla cella iniziale
  • cols = 0, offset zero colonne che iniziano la cella
  • altezza = RIGA () - RIGA (B $ 5) -1 = 5 righe di altezza
  • larghezza = 1 colonna di larghezza

Per calcolare l'altezza dell'intervallo in righe, usiamo la funzione ROW in questo modo:

ROW()-ROW(B$5)-1 // work out height

Poiché ROW () restituisce il numero di riga della cella "corrente" (ovvero la cella in cui risiede la formula), possiamo semplificare in questo modo:

=ROW()-ROW(B$5)-1 =11-5-1 =5

Con la configurazione precedente, OFFSET restituisce l'intervallo B5: B9 direttamente a COUNTIFS:

=COUNTIFS(B5:B9,"") // returns 4

Si noti che il riferimento a B $ 5 nella formula sopra è un riferimento misto, con la colonna relativa e la riga bloccata. Ciò consente di copiare la formula in un'altra colonna e continuare a funzionare. Ad esempio, una volta copiata in C12, la formula è:

=COUNTIFS(OFFSET(C$5,0,0,ROW()-ROW(C$5)-1,1),"")

Nota: OFFSET è una funzione volatile e può causare problemi di prestazioni in fogli di lavoro grandi o complessi.

Con INDIRETTO e INDIRIZZO

Un altro approccio consiste nell'utilizzare una formula basata sulle funzioni INDIRETTO e INDIRIZZO. In questo caso, assembliamo un intervallo come testo, quindi utilizziamo INDIRETTO per valutare il testo come riferimento. La formula in B11 sarebbe:

=COUNTIFS(INDIRECT(ADDRESS(5,COLUMN())&":"&ADDRESS(ROW()-2,COLUMN())),"")

La funzione INDIRIZZO viene utilizzata per costruire un intervallo come questo:

ADDRESS(5,COLUMN())&":"&ADDRESS(ROW()-2,COLUMN())

Nella prima istanza di ADDRESS, forniamo il numero di riga come valore hardcoded 5 e forniamo il numero di colonna con la funzione COLUMN:

=ADDRESS(5,COLUMN()) // returns "$B$5"

Nella seconda istanza, forniamo il numero di riga "corrente" meno 2 e la colonna corrente con la funzione COLUMN:

=ADDRESS(ROW()-2,COLUMN()) // returns "$B$9"

Dopo aver concatenato questi due valori insieme, abbiamo:

"$B$5:$B$9" // as text

Nota che questa è una stringa di testo. Per convertire in un riferimento valido, dobbiamo usare INDIRETTO:

=INDIRECT("$B$5:$B$9") // returns $B$5:$B$9 as valid range

Infine, la formula in B11 diventa:

=COUNTIFS($B$5:$B$9,"") // returns 4

Nota: INDIRETTO è una funzione volatile e può causare problemi di prestazioni in fogli di lavoro grandi o complessi.

Articoli interessanti...