Srinivas ha dati in entrambe le colonne A e B. Deve sommare i valori nella colonna B per i quali il formato della cella delle celle corrispondenti nella colonna A è giallo. Ad esempio, se il formato nella cella A17 è giallo, il valore nella cella B17 dovrebbe essere incluso nella somma.

Sono disponibili numerose macro su Internet (incluso ExcelTips) che consentono di eseguire la somma condizionale in base al colore o ad un altro formato di una cella. Questa esigenza è diversa, tuttavia, in quanto non è il colore della cella in questione, ma il colore della cella una colonna a sinistra. Questo può ancora essere fatto usando una macro, come mostrato qui:

Function SumNextYellow(ByVal r As Range)

Dim c As Range     Dim a As Double

For Each c In r         If c.Offset(0, -1).Interior.ColorIndex = 6 Then 'Yellow             a = a + c.Value         End If     Next c     SumNextYellow = a End Function

La funzione può essere utilizzata in una formula del foglio di lavoro e accetta un riferimento a un intervallo come argomento. Quindi passa attraverso ogni cella dell’intervallo e se la cella appena a sinistra è gialla, il valore viene incluso nella somma. (Tieni presente che il ColorIndex utilizzato nella macro deve essere testato con la tua versione di Excel per assicurarti che sia applicabile; potrebbe essere diverso nelle diverse versioni.)

Un esempio molto più affidabile è mostrato nel seguente elenco. Questa funzione accetta uno o più intervalli di celle, insieme a un argomento che rappresenta un esempio della formattazione che si desidera utilizzare.

Function ColorConditionSum(cSample As Excel.Range, rng As Excel.Range)

' This Function returns sum of values in rng.Columns(2) if ' corresponding cell in rng.Columns(1) is colored with sample ' color (cSample cell)



' Arguments: cSample = cell colored by sample color '            rng = cell range to be processed (2 columns)



Dim rngCol2 As Excel.Range     Dim rngConstants As Excel.Range     Dim rngFormulas As Excel.Range     Dim lColorIndex As Long     Dim MySum As Double     Dim area As Excel.Range     Dim c As Excel.Range

ColorConditionSum = False     If Not TypeOf cSample Is Excel.Range Then Exit Function '>>>     lColorIndex = cSample.Interior.ColorIndex

MySum = 0     Set rngCol2 = Nothing     If TypeOf rng Is Excel.Range Then         If rng.Columns.Count < 2 Then Exit Function '>>>         On Error Resume Next         For Each area In rng.Areas             If rngCol2 Is Nothing Then                 Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeConstants, 1)

If rngCol2 Is Nothing Then                     Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeFormulas, 1)

Else                     Set rngCol2 = Application.Union( _                         rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1))

End If             Else                 Set rngCol2 = Application.Union( _                     rngCol2, area.Columns(2).SpecialCells(xlCellTypeConstants, 1))

Set rngCol2 = Application.Union( _                     rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1))

End If         Next area

For Each area In rngCol2.Areas             For Each c In area.Cells                 With c.Offset(0, -1)

If .Interior.ColorIndex = lColorIndex Then                         MySum = MySum + c.Value                     End If                 End With             Next c         Next area     End If

ColorConditionSum = MySum End Function

Si utilizza questa funzione nel modo seguente in un foglio di lavoro:

=ColorConditionSum(A10, A12:B22)

In questo caso, è una cella che ha il colore interno che vuoi abbinare e A12: B22 è l’intervallo di celle da valutare. I valori vengono estratti dalla seconda colonna dell’intervallo e la formattazione viene verificata nelle celle della prima colonna.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (3298) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: