Non l'ho capita ma me la annoto nel blog perché funziona.
Ho una tabella della quale voglio sommare per ogni riga, i valori delle colonne da B a - poniamo - H.
Inoltre li voglio sommare solo se la colonna A non è vuota.
E se aggiungo o rimuovo colonne tra B e H, la formula dovrebbe tenerne conto.
In riga 2 i titoli:
NOME | ORE1 | ORE2 | ORE3 | ... | OREn | TOT-ORE
Con Google Sheets, la funzione SOMMA() richiede un intervallo o un elenco di celle o intervalli da sommare, ma poi riporta sempre un unico risultato.
Se si usa un intervallo (es. A2:E7), qualora nel foglio vengano aggiunte righe o colonne all'interno dell'intervallo, questo viene esteso automaticamente per comprendere anche quelle (e diventa per esempio A2:E7 o A2:D8),
Se nella formula si elencano solamente le celle o intervalli, Google non può sapere se quando aggiungiamo una colonna o riga nel foglio la vogliamo aggiungerne anche nella formula e non la aggiunge.
SOMMA() non funziona con ARRAYFORMULA() in quanto se scrivo SOMMA(A1:D7) questa espressione ha il significato di sommare tutte le celle dell'intervallo e dar un unico risultato mentre il mio intento era quello di avere un risultato per ogni riga. E se scrivo ARRAYFORMULA(SOMMA(A1:D7)) Google non può capire il mio intento e giustamente continua a darmi un unico risultato.
Cercando, ho trovato su stackoverflow (https://stackoverflow.com/questions/21797621/arrayformula-sum-in-google-spreadsheet) una formula che pare fare al caso mio.
Ho lievemente adattato la formula per verificare che in colonna A ci siano celle con contenuto e quindi mettere un risultato solo su righe valide e non in quelle vuote.
La formula, messa nella riga del titolo (riga 2), mostrerà "Totale Ore" in riga 2 e sotto elenca le somme delle varie colonne a fianco.
Se aggiungo o tolgo colonne la formula si allarga o restringe da sé.
La formula ARRAYFORMULA() con SOMMA.SE()
={"Totale ore"; ARRAYFORMULA(SE(A3:A <> ""; (SOMMA.SE(SE(RIF.COLONNA(B:H); RIF.RIGA(A3:A)); RIF.RIGA(A3:A); B3:H));))}
In RIF.COLONNA() va indicato l'intervallo orizzontale ("B.H" in questo caso).
In RIF.RIGA() va indicato l'intervallo verticale. Indicando A3:A si va dalla riga 3 fino al fondo. La "A" non ha importanza, sarebbe lo stesso con B3:B o A3:Z perché RIF.RIGA() riporta solo il numero di riga.
Se si volesse limitare l'intervallo occorrerebbe indicare per esempio A3:A10.
Nessun commento:
Posta un commento
NOTA: Attualmente i commenti sono moderati, vale a dire che non compariranno immediatamente. Questo mi consente sia eliminare eventuale spam sia di leggere i messaggi e eventualmente rispondere.