#Excel Contare e sommare celle in base al colore

User Defined Functions (UDF) e Visual Basic for Applications (VBA)

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 01 Gennaio 2023
Categoria: Microsoft Office Excel Funzioni UDF

Iscriviti gratuitamente al mio canale YouTube su Excel!
Ti serve un corso Excel? Cliccami ora!

#Excel – Contare e sommare celle in base al colore
#Excel: contare e sommare celle in base al colore

Excel può contare e sommare le celle in base al colore (a prescindere se siano colorate a mano o tramite formattazione condizionale). Purtroppo Microsoft Excel non possiede funzioni CONTA.COLORE o SOMMA.COLORE e, per soddisfare la richiesta, è necessario ricorrere alle User Defined Functions (UDF) e al Visual Basic for Applications (VBA), che in questo articolo sono già belle e pronte (puoi scaricare l'esempio a fine articolo). Non aspettiamo altro tempo e scopriamo come possa Excel Contare e sommare celle in base al colore.

Sommario #Excel: contare e sommare celle in base al colore

Contare o sommare per colore in un foglio Excel

Supponiamo di avere una tabella che, nella colonna Pagamento, mostri tre risposte associate a tre colori (Effettuato è verde, Scaduto da 1 mese è giallo e Scaduto da oltre 1 mese è arancio). Con questo tutorial imparerai a creare, tramite linguaggio VBA, le funzioni che vedi a partire dalla riga 10.

#Excel – Contare e sommare celle in base al colore
Contare o sommare per colore in un foglio #Excel

Per contare le celle in base al colore:

Function ColoreCella(xlIntervallo As Range)
Dim indRiga, indColonna As Long
Dim arRisultati()
Application.Volatile
If xlIntervallo Is Nothing Then
Set xlIntervallo = Application.ThisCell
End If
If xlIntervallo.Count > 1 Then
ReDim arRisultati(1 To xlIntervallo.Rows.Count, 1 To xlIntervallo.Columns.Count)
For indRiga = 1 To xlIntervallo.Rows.Count
For indColonna = 1 To xlIntervallo.Columns.Count
arRisultati(indRiga, indColonna) = xlIntervallo(indRiga, indColonna).Interior.Color
Next
Next
ColoreCella = arRisultati
Else
ColoreCella = xlIntervallo.Interior.Color
End If
End Function

Function ColoreCarattere(xlIntervallo As Range)
Dim indRiga, indColonna As Long
Dim arRisultati()
Application.Volatile
If xlIntervallo Is Nothing Then
Set xlIntervallo = Application.ThisCell
End If
If xlIntervallo.Count > 1 Then
ReDim arRisultati(1 To xlIntervallo.Rows.Count, 1 To xlIntervallo.Columns.Count)
For indRiga = 1 To xlIntervallo.Rows.Count
For indColonna = 1 To xlIntervallo.Columns.Count
arRisultati(indRiga, indColonna) = xlIntervallo(indRiga, indColonna).Font.Color
Next
Next
ColoreCarattere = arRisultati
Else
ColoreCarattere = xlIntervallo.Font.Color
End If
End Function

Function ContaPerColoreCella(rData As Range, cellRefColor As Range) As Long
Dim indRefColor As Long
Dim cellaCorrente As Range
Dim conta As Long
Application.Volatile
conta = 0
indRefColor = cellRefColor.Cells(1, 1).Interior.Color
For Each cellaCorrente In rData
If indRefColor = cellaCorrente.Interior.Color Then
conta = conta + 1
End If
Next cellaCorrente
ContaPerColoreCella = conta
End Function

Function SommaPerColoreCella(rData As Range, cellRefColor As Range)
Dim indRefColor As Long
Dim cellaCorrente As Range
Dim somma
Application.Volatile
somma = 0
indRefColor = cellRefColor.Cells(1, 1).Interior.Color
For Each cellaCorrente In rData
If indRefColor = cellaCorrente.Interior.Color Then
somma = WorksheetFunction.Sum(cellaCorrente, somma)
End If
Next cellaCorrente
SommaPerColoreCella = somma
End Function

Function ContaPerColoreCarattere(rData As Range, cellRefColor As Range) As Long
Dim indRefColor As Long
Dim cellaCorrente As Range
Dim conta As Long
Application.Volatile
conta = 0
indRefColor = cellRefColor.Cells(1, 1).Font.Color
For Each cellaCorrente In rData
If indRefColor = cellaCorrente.Font.Color Then
conta = conta + 1
End If
Next cellaCorrente
ContaPerColoreCarattere = conta
End Function

Function SommaPerColoreCarattere(rData As Range, cellRefColor As Range)
Dim indRefColor As Long
Dim cellaCorrente As Range
Dim somma
Application.Volatile
somma = 0
indRefColor = cellRefColor.Cells(1, 1).Font.Color
For Each cellaCorrente In rData
If indRefColor = cellaCorrente.Font.Color Then
somma = WorksheetFunction.Sum(cellaCorrente, somma)
End If
Next cellaCorrente
SommaPerColoreCarattere = somma
End Function

Ovviamente per contare e sommare per colore carattere, anziché colore cella, basta sostituire nelle formule il termine Cella con Carattere.

Se successivamente si avesse la necessità di colorare manualmente altre celle dell’intervallo, le funzioni non verrebbero ricalcolate in maniera automatica; è infatti questo il comportamento delle macro di Excel, del VBA e delle User Defined Functions.
Ma non c’è problema perché, per aggiornare somma e conteggio, è sufficiente posizionare il cursore in una cella e premere F2 seguito dal tasto Invio.

Contare o sommare le celle colorate tramite formattazione condizionale

Purtroppo le UDF non funzioneranno correttamente se, per colorare le celle in base ai loro valori, è stata utilizzata la formattazione condizionale di Excel del tipo

È però possibile superare questo limite con il VBA, vediamo come:
Sub SommaContaFormCond()
Dim indRefColor As Long
Dim cellaCorrente As Range
Dim conta As Long
Dim somma
Dim contaCelle As Long
Dim indCellaCorrente As Long
conta = 0
somma = 0
contaCelle = Selection.CountLarge
indRefColor = ActiveCell.DisplayFormat.Interior.Color
For indCellaCorrente = 1 To (contaCelle - 1)
If indRefColor = Selection(indCellaCorrente) .DisplayFormat.Interior.Color Then
conta = conta + 1
somma = WorksheetFunction .Sum(Selection(indCellaCorrente), somma)
End If
Next
Range("G2").Value = conta
Range("G3").Value = somma
'oppure al posto delle due righe precedenti
MsgBox "Conteggio=" & conta & vbCrLf & "Somma= " & somma, , "Conteggio e Somma"
End Sub

Ecco come utilizzarlo:

Se opti per le due righe
Range("G2").Value = conta
Range("G3").Value = somma

otterrai il conteggio e la somma rispettivamente nelle celle G2 e G3 (che ovviamente puoi cambiare a tuo piacimento); se invece scegli la riga
MsgBox "Conteggio=" & conta & vbCrLf & "Somma= " & somma, , "Conteggio e Somma"
apparirà una finestra con i risultati del conteggio e della somma.

Scarica l'esempio

Scopri come contare con le funzioni statistiche di Microsoft Excel e come sommare con le funzioni matematiche.

Conclusione

Abbiamo visto insieme un'ottima soluzione per ovviare a una mancanza di Microsoft Excel, ovvero contare le celle in base al colore. Attraverso il VBA e le UDF siamo stati in grado di inventare delle funzioni e un metodo che ci ha consentito di migliorare l'applicativo risolvendo un'esigenza lavorativa molto comune.

Per saperne di più su Microsoft Excel potrebbero interessarti i video corsi Excel o questi libri:


Se vuoi approfondire alcuni dei temi trattati, visita la pagina con le mie pubblicazioni cartacee e online

Se l'articolo ti è piaciuto, condividilo!

Segui l'hashtag #AndreaPacchiarotti