Il Blog di Andrea Perotti



Sommare o contare celle colorate in Excel

Prendiamo un intervallo di celle in Excel e immaginiamo di voler contare o ottenere la somma solo di quelle celle che presentano o nello sfondo o nel carattere, un particolare colore.

Con la procedura seguente vediamo come sia possibile.

Prima di tutto si deve lavorare tramite codice VBA quindi apriamo la relativa finestra.

In Excel XP o 2003:
Menù Strumenti - Macro - Visual Basic Editor

In Excel 2007:
Bottone di Office - Pulsante Opzioni di Excel - Impostazioni generali - Opzione "Mostra scheda Sviluppo sulla barra multifunzione"
A questo punto ritornando nella finestra di Excel verrà visualizzata anche la Scheda Sviluppo nella quale troviamo il pulsante Visual Basic

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci - Modulo)
Copiare il codice riportato sotto relativo alla funzione desiderata:

Per contare le celle di un intervallo in base al colore dello sfondo o del carattere

Function CountByColor(InRange As Range, _
WhatColorIndex As Integer, _
Optional OfText As Boolean = False) As Long
'
' This function return the number of cells in InRange with
' a background color, or if OfText is True a font color,
' equal to WhatColorIndex.
'
Dim Rng As Range
Application.Volatile True

For Each Rng In InRange.Cells
If OfText = True Then
CountByColor = CountByColor - _
(Rng.Font.ColorIndex = WhatColorIndex)
Else
CountByColor = CountByColor - _
(Rng.Interior.ColorIndex = WhatColorIndex)
End If
Next Rng

End Function


Chiudere la finestra e ritornare in Excel. La funzione che deve essere inserita per contare le celle secondo un colore è la seguente:

=COUNTBYCOLOR(INTERVALLO,COLORE,TIPO COLORE)

In cui:
INTERVALLO: L'intervallo delle celle che verranno analizzate
COLORE: Il numero del colore relativo alle effettive celle da contare
TIPO COLORE: VERO per indicare che il colore è riferito al testo - FALSO per indicare che il colore è riferito allo sfondo

Esempio:
=COUNTBYCOLOR(A10:B30,3,FALSO)
Conta, nell'intervallo A10:B30, le celle che hanno lo sfondo rosso

Il numero da inserire nella formula, relativo al colore da analizzare, lo si può dedurre dalla tabella in fondo (numeri da 1 a 56)


Per sommare le celle di un intervallo in base al colore dello sfondo o del carattere

Function SumByColor(InRange As Range, WhatColorIndex As Integer, _
Optional OfText As Boolean = False) As Double
'
' This function return the SUM of the values of cells in
' InRange with a background color, or if OfText is True a
' font color, equal to WhatColorIndex.
'
Dim Rng As Range
Dim OK As Boolean

Application.Volatile True
For Each Rng In InRange.Cells
If OfText = True Then
OK = (Rng.Font.ColorIndex = WhatColorIndex)
Else
OK = (Rng.Interior.ColorIndex = WhatColorIndex)
End If
If OK And IsNumeric(Rng.Value) Then
SumByColor = SumByColor + Rng.Value
End If
Next Rng

End Function


Chiudere la finestra e ritornare in Excel. La funzione che deve essere inserita per sommare le celle secondo un colore è la seguente:


=SUMBYCOLOR(INTERVALLO,COLORE,TIPO COLORE)

In cui:
INTERVALLO: L'intervallo delle celle che verranno analizzate
COLORE: Il numero del colore relativo alle effettive celle da sommare
TIPO COLORE: VERO per indicare che il colore è riferito al testo - FALSO per indicare che il colore è riferito allo sfondo

Esempio:
=SUMBYCOLOR(A10:B30,3,FALSO)
Somma, nell'intervallo A10:B30, le celle che hanno lo sfondo rosso

Il numero da inserire nella formula, relativo al colore da analizzare, lo si può dedurre dalla tabella in fondo (numeri da 1 a 56)

Da tener presente, per entrambi i casi, che se il colore nelle celle viene cambiato il calcolo non si aggiorna automaticamente ma sarà necessario aggiornarlo manualmente ad esempio tramite il tasto F9.

P.S.
Nelle funzioni, per delimitare gli argomenti, andrà utilizzato il separatore appropriato a seconda della lingua di Excel, ossia la virgola nel caso che Excel sia in Inglese o il punto e virgola nel caso in cui Excel sia in Italiano.

Tabella Colori

Black[Color 1] #000000#000000 000 [Black]
White[Color 2] #FFFFFF#FFFFFF 255255255 [White]
Red [Color 3] #FF0000#FF0000 25500 [Red]
Green [Color 4] #00FF00#00FF00 02550 [Green]
Blue [Color 5] #0000FF#0000FF 00255 [Blue]
Yellow [Color 6] #FFFF00#FFFF00 2552550 [Yellow]
Magenta [Color 7] #FF00FF#FF00FF 2550255 [Magenta]
Cyan [Color 8] #00FFFF#00FFFF 0255255 [Cyan]
[Color 9] [Color 9] #800000#800000 12800 [Color 9]
[Color 10] [Color 10] #008000#008000 01280 [Color 10]
[Color 11] [Color 11] #000080#000080 00128 [Color 11]
[Color 12] [Color 12] #808000#808000 1281280 [Color 12]
[Color 13] [Color 13] #800080#800080 1280128 [Color 13]
[Color 14] [Color 14] #008080#008080 0128128 [Color 14]
[Color 15] [Color 15] #C0C0C0#C0C0C0 192192192 [Color 15]
[Color 16] [Color 16] #808080#808080 128128128 [Color 16]
[Color 17] [Color 17] #9999FF#9999FF 153153255 [Color 17]
[Color 18] [Color 18] #993366#993366 15351102 [Color 18]
[Color 19] [Color 19] #FFFFCC#FFFFCC 255255204 [Color 19]
[Color 20] [Color 20] #CCFFFF#CCFFFF 204255255 [Color 20]
[Color 21] [Color 21] #660066#660066 1020102 [Color 21]
[Color 22] [Color 22] #FF8080#FF8080 255128128 [Color 22]
[Color 23] [Color 23] #0066CC#0066CC 0102204 [Color 23]
[Color 24] [Color 24] #CCCCFF#CCCCFF 204204255 [Color 24]
[Color 25] [Color 25] #000080#000080 00128 [Color 25]
[Color 26] [Color 26] #FF00FF#FF00FF 2550255 [Color 26]
[Color 27] [Color 27] #FFFF00#FFFF00 2552550 [Color 27]
[Color 28] [Color 28] #00FFFF#00FFFF 0255255 [Color 28]
[Color 29] [Color 29] #800080#800080 1280128 [Color 29]
[Color 30] [Color 30] #800000#800000 12800 [Color 30]
[Color 31] [Color 31] #008080#008080 0128128 [Color 31]
[Color 32] [Color 32] #0000FF#0000FF 00255 [Color 32]
[Color 33] [Color 33] #00CCFF#00CCFF 0204255 [Color 33]
[Color 34] [Color 34] #CCFFFF#CCFFFF 204255255 [Color 34]
[Color 35] [Color 35] #CCFFCC#CCFFCC 204255204 [Color 35]
[Color 36] [Color 36] #FFFF99#FFFF99 255255153 [Color 36]
[Color 37] [Color 37] #99CCFF#99CCFF 153204255 [Color 37]
[Color 38] [Color 38] #FF99CC#FF99CC 255153204 [Color 38]
[Color 39] [Color 39] #CC99FF#CC99FF 204153255 [Color 39]
[Color 40] [Color 40] #FFCC99#FFCC99 255204153 [Color 40]
[Color 41] [Color 41] #3366FF#3366FF 51102255 [Color 41]
[Color 42] [Color 42] #33CCCC#33CCCC 51204204 [Color 42]
[Color 43] [Color 43] #99CC00#99CC00 1532040 [Color 43]
[Color 44] [Color 44] #FFCC00#FFCC00 2552040 [Color 44]
[Color 45] [Color 45] #FF9900#FF9900 2551530 [Color 45]
[Color 46] [Color 46] #FF6600#FF6600 2551020 [Color 46]
[Color 47] [Color 47] #666699#666699 102102153 [Color 47]
[Color 48] [Color 48] #969696#969696 150150150 [Color 48]
[Color 49] [Color 49] #003366#003366 051102 [Color 49]
[Color 50] [Color 50] #339966#339966 51153102 [Color 50]
[Color 51] [Color 51] #003300#003300 0510 [Color 51]
[Color 52] [Color 52] #333300#333300 51510 [Color 52]
[Color 53] [Color 53] #993300#993300 153510 [Color 53]
[Color 54] [Color 54] #993366#993366 15351102 [Color 54]
[Color 55] [Color 55] #333399#333399 5151153 [Color 55]
[Color 56] [Color 56] #333333#333333 515151 [Color 56]

Tags: , , , , ,

Etichette: ,

posted by Andrea Perotti @ 19.26 Permalink ,

46 Comments:

At 29 settembre 2007 12.05, Anonymous Anonimo said...

ho provato ad usare la formula ma mi dà un errore: cosa posso guardare?

 
At 29 settembre 2007 16.53, Blogger Andrea Perotti said...

Segui alla lettera le istruzioni e vedrai che funziona.

 
At 2 novembre 2007 10.00, Anonymous Anonimo said...

Per far funzionare la formula all'interno della parentesi rotonda ci vanno i PUNTI E VIRGOLA al posto della virgola per delimitare i parametri...

 
At 2 novembre 2007 10.23, Blogger Andrea Perotti said...

@anonimo: dipende dalla versione di Excel che usi. In lingua italiana ci vuole il punto e virgola, in inglese la virgola.

 
At 2 gennaio 2008 15.12, Anonymous giodifi said...

non funziona per le celle colorate tramite formattazione condizionale!!!

 
At 2 gennaio 2008 16.16, Blogger Andrea Perotti said...

@giodifi: queste formule funzionano solo utilizzando i colori impostati manualmente, non quelli che attribuisce la formattazione condizionale.

 
At 10 gennaio 2008 09.19, Anonymous domenico said...

entrambe le formule sono ottime e funzionanti, e meritano un ringraziamento. Solo due considerazioni:
1. vengono contate / sommate tutte le celle formattate per un determinato colore, anche se vuote. E' possibile "dettagliare" la conta / somma solo per le celle dell'intervallo che contengono dei valori?
2. se cambio i colori dentro l'intervallo oggetto di conta / somma - se cambio il numero di colore nella barra della formula, questa non si ricalcola in automatico, ma deve essere reimpostata. Any suggest in proposito?
Ringrazio da subito per l'eventuale attenzione a questo post.
Domenico
dmorello@libero.it

 
At 10 gennaio 2008 17.48, Blogger Andrea Perotti said...

@Domenico: la formula così com'è non fa l'aggiornamento automatico e conta tutte le celle. Vedrò in futuro di fare delle modifiche per aggiornarla in tal senso.

 
At 18 gennaio 2008 17.44, Anonymous MAX said...

Non mi funziona, e non capisco dove sia il problema. Ho bisogno di effettuare un calcolo di tutte le celle che hanno il colore giallo. Ho inserito il codice vba, ma non mi riconosce la funzione countbycolor. Utilizzo Office 2007. Mi riporta "Rilevato nome non univoco. CountByColor"

 
At 18 gennaio 2008 17.52, Anonymous MAX said...

Scusate, non so come, ma ho risolto e funziona perfettamente.

 
At 25 gennaio 2008 11.33, Anonymous saoly65 said...

Semplicemente FANTASTICO! Grazie sei stato chiaro e preciso!

 
At 15 luglio 2008 11.21, Anonymous Anonimo said...

Ho bisogno di effettuare un calcolo di tutte le celle che hanno il colore rosso. Ho inserito il codice vba, ma non mi riconosce la funzione countbycolor.
Mi riporta "Rilevato nome non univoco. CountByColor"

 
At 15 luglio 2008 11.40, Blogger Andrea Perotti said...

@Anonimo: segui passo passo le istruzioni e vedrai che funziona. ;)

 
At 7 agosto 2008 18.41, Anonymous Anonimo said...

Mi chiamo Maurizio, lavoro in una Banca, e voglio ringraziarTi perchè le indicazioni fornite sono precise ed assai utili, avendomi consentito fra l'altro di risolvere un problema posto da una collega.
Grazie ancora e buone ferie.

Maurizio

 
At 26 agosto 2008 11.39, Blogger marcaudo said...

Come da Tue indicazioni, ho copiato il codice (copia e incolla) su un modulo excel 2003 e riportato la formula (sempre col copia e incolla) sulla barra delle formule, ma mi dà sempre risultato = 0. Cosa ho omesso?
Grazie per l'aiuto

 
At 26 agosto 2008 11.51, Blogger marcaudo said...

Risolto il problema. Scusate.
Marcello

 
At 7 ottobre 2008 14.26, Anonymous LiL said...

Prima di tutto complimenti per il blog, grazie a voi ho risolto un bel problema con excel..
Solo un quesito: se volessi individuare individuare le celle che hanno come font il "colore automatico", come dovrei fare? Esiste un numero anche per esso?
Grazie mille
:)

 
At 8 ottobre 2008 15.49, Blogger Andrea Perotti said...

@LiL: la formula si basa sulla paletta dei colori e non vi è un numero per quello che viene definito "colore automatico".

 
At 5 novembre 2008 11.15, Blogger zenzero said...

mi restituisce "nome?", dove ho sbagliato?

 
At 5 novembre 2008 12.34, Blogger Andrea Perotti said...

@zenzero: probabilmente sbagli nel digitare il nome della formula o un argomento ;)

 
At 6 novembre 2008 10.40, Blogger zenzero said...

il codice l'ho copiato e incollato e anche la formula, modificandola poi.
non credo che riconosca il COUNTBYCOLOR

ti copio e incollo qui la formula inserita:
=COUNTBYCOLOR(B6:L6;3;FALSO)
(doveva riconoscere il colore Rosso del carattere)windows xp - excel 2003

grazie. antonella

 
At 6 novembre 2008 11.04, Blogger zenzero said...

grazie ho risolto
antonella

 
At 12 marzo 2009 19.54, Anonymous Tonino said...

La formula è eccezionale.
C'è solo il problema del carattere automatico (che non è RGB 000 ma 49 49 49)che non viene sommato e pertanto se un utente inesperto clicca sul colore automatico anzicchè sul n.1 crede che la formula non funzioni. Non si potrebbe fare in modo di mettere nell'argomento COLORE i 3 valori RGB? Ciao e grazie.

 
At 7 aprile 2009 15.13, Anonymous Anonimo said...

Formule preziosissime, grazie molte.
Aspetto impaziente il ricalcolo automatico delle celle, sempre sia possibile. Saluti!

 
At 9 aprile 2009 16.25, Anonymous Anonimo said...

Grande, cercavo una cosa così da una vita!!!
Funziona perfettamente, grazie!!

 
At 22 luglio 2009 10.32, Anonymous Anonimo said...

grazie per l'aiuto!
aspetto riconoscente gli aggiornamenti

saluti dalla Polonia

 
At 2 agosto 2009 22.21, Blogger federicoacdc said...

Mi chiamo Federico, da Bologna. GRAZIE. funziona a meraviglia. queste prime volte sembreranno sempre una specie di magia ...
grazie ancora

 
At 12 ottobre 2009 10.45, Anonymous ANDREA G. said...

SEMPLICEMENTE.. PERFETTO!

GRAZIE MILLE

 
At 26 ottobre 2009 14.15, Blogger zanzarame said...

Ciao.

Ho seguito passo passo le istruzioni (copia e incolla, in buona sostanza) però ottengo sempre l'errore "Rilevato nome non univoco. SumByColor".
Ho visto che si è presentato anche ad altri e che hanno risolto: potete dirmi come?
Anche un aiuto dall'autore sarebbe graditissimo :-)

Grazie 1000.

 
At 17 novembre 2009 03.18, Anonymous Stefano Capriulo said...

Grazie mille per questo modulo, molto utile, solo che è utile per i numeri (e colori) 1,2,3 oltre al 3 il risultato è SEMPRE 0...
ho seguito tutto alla lettera (e nn sn alle prime armi con un computer)

Stefano.

 
At 17 novembre 2009 08.01, Blogger Andrea Perotti said...

Stefano, probabilmente stai sbagliando qualcosa perchè funziona con tutti i numeri; se vuoi mandami il file per mail che provo a dare un'occhiata.

 
At 20 novembre 2009 11.57, Blogger strigia said...

Prima di tutto grazie per il codice, l'ho provato funziona ma per farlo funzionare, una volta cambiato il colore, non mi basta fare f9 devo rientrare nella formula e fare invio altrimenti non aggiorna. La funzione appare tra le definite dall'utente ma ha questo problema. Dipende da qualche mia impostazione?

 
At 4 gennaio 2010 16.29, Anonymous STEX81 said...

...grande..la formula funziona alla grande. Mi riconosce solo il colore di sfondo della cella e non il colore del font. Come devo modificare la formula per farla funzionare con il colore font?
Grazie 1000 x l'aiuto :-)

 
At 4 gennaio 2010 22.59, Blogger Andrea Perotti said...

@Stex81: per sommare le celle in base al colore del testo devi mettere VERO come ultimo argomento della formula. Se hai problemi mandami il file che provo a controllarlo.

 
At 20 gennaio 2010 14.14, Anonymous Anonimo said...

Grazie mille, ho seguito alla lettera passo dopo passo, funziona benissimo, perfetto! Grazie. Giovanni

 
At 18 febbraio 2010 18.25, Anonymous Gabriele said...

Help me !
mi sento stupido ma copiando tutto il codice (parte rossa e parte blu) nella finestra e poi uscendo con "esci e torna ad Excel", quando copio la formula nella cella che mi interessa, il programma mi restituisce "errore di compilazione: previsto : fine istruzione" e un quadratino azzurro mi si posiziona sul "le" del titolo. Forse dovevo compilare l'istruzione prima di chiudere ? Uso il 2003 su XP.
Grazie 1000

 
At 18 febbraio 2010 18.37, Blogger Andrea Perotti said...

@Gabriele: il codice è quello blu, le righe in rosso sono il titolo per capire cosa fa una e cosa fa l'altra, non le devi copiare! Devi prendere solo la parte blu ;)

 
At 19 febbraio 2010 17.55, Anonymous Gabriele said...

Ok, sono un pollo !
Ho cancellato il modulo già registrato, ho copiato solo il blu e poi ho copiato l'istruzione nella cella del foglio Excel COUNTBYCOLOR(F4:F40;3;false) .
Il risultato è che Excel non mi da più errore ma nella cella dove ho inserito la formula compare uno scoraggiante #VALORE!

Questa volta dove ho sbagliato ? Mannaggia a me !

Comunque grazie per il prezioso aiuto. Ciao

Gabriele

 
At 20 febbraio 2010 09.21, Anonymous Axe said...

Ragazzi ho provato ad inserire la lsita in Execl 2007 ma il risultato è sempre zero....

 
At 20 febbraio 2010 09.22, Anonymous Anonimo said...

Anche a me risulta sempre zero vorrei contare nella colonna A di excel tutte le celle colorate in viola (13) ma il risultato è zero anche se uso altri colori.
GRAZIE

 
At 21 febbraio 2010 16.19, Blogger Andrea Perotti said...

@Gabriele: ammesso che tu abbia Excel in Italiano allora hai messo FALSE al posto di FALSO come ultimo argomento della formula.

 
At 21 febbraio 2010 16.24, Blogger Andrea Perotti said...

@AXE e Anonimo: state sbagliando qualcosa o nella creazione del modulo o nella formula; se non riuscite a risolvere mandatemi il file che ve lo sistemo.

 
At 22 febbraio 2010 09.34, Anonymous Anonimo said...

Sei un grande!
ho risolto in 5 minuti un problema che da solo non avrei mai risolto: grazie mille

Luca

 
At 22 febbraio 2010 14.31, Anonymous Gabriele said...

Ok, ho la conferma che io sono un pollo !
Per fortuna che ci sei tu che sei un GRANDE !

Non so come ringraziarti.

ciao

Gabriele

 
At 22 febbraio 2010 19.46, Blogger dott.ssa Lucia Giammarinaro said...

Grazie mille...
se mi assumono è merito tuo!

 
At 22 febbraio 2010 21.25, Blogger Andrea Perotti said...

@Gabriele: di nulla!

@Lucia: Allora nel caso devi pagare da bere ;)

 

Posta un commento

<< Home