Prendiamo un intervallo di celle in Excel e immaginiamo di voler sommare o contare celle colorate, ovvero 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 (punto e virgola o virgola) a seconda delle impostazioni internazionali utilizzate.

Tabella Colori

Creare un componente aggiuntivo (Add-Ins) per Excel
Il dopo aperitivo

Informatics, ski racer, loves Finland, Norway, mountains, squash, photography, Drones and RC Helicopter – Snapchat: andrea.perotti

Translate »