How to count formatted cells?

S

spden1

Hope someone can help me with this. How can I have Excel count th
number of cells that are formatted in a certain way. Example, I have
spreadsheet that has 100's of cells in which the font is red in color.
I'd like Excel to tally up the number of "red" cells for me. An
ideas?

Thanks
 
F

Frank Kabel

Hi
you need VBA for this. Using a procedure from Bob Phillips and Harlan
Grove you may try the
following:


To get the colorindex of a specific cell use
=ColorIndex(A1)

In your case maybe the formula
=IF(ColorIndex(A1)=3,A1*5,"don't know")
for multiplying red cells with 5

Adapt this to your requirements

------
'Code to paste in one of your modules

'---------------------------------------------------------------------
Function ColorIndex(rng As Range, _
Optional text As Boolean = False) As Variant
'---------------------------------------------------------------------
' Function: Returns the colorindex of the supplied range
' Synopsis:
' Author: Bob Phillips/Harlan Grove
'
'---------------------------------------------------------------------
Dim cell As Range, row As Range
Dim i As Long, j As Long
Dim iWhite As Long, iBlack As Long
Dim aryColours As Variant

If rng.Areas.Count > 1 Then
ColorIndex = CVErr(xlErrValue)
Exit Function
End If

iWhite = WhiteColorindex(rng.Worksheet.Parent)
iBlack = BlackColorindex(rng.Worksheet.Parent)

If rng.Cells.Count = 1 Then
If text Then
aryColours = DecodeColorIndex(rng, True, iBlack)
Else
aryColours = DecodeColorIndex(rng, False, iWhite)
End If

Else
aryColours = rng.Value
i = 0

For Each row In rng.Rows
i = i + 1
j = 0

For Each cell In row.Cells
j = j + 1

If text Then
aryColours(i, j) = _
DecodeColorIndex(cell,True,iBlack)
Else
aryColours(i, j) = _
DecodeColorIndex(cell,False,iWhite)
End If

Next cell

Next row

End If

ColorIndex = aryColours

End Function

Private Function WhiteColorindex(oWB As Workbook)
Dim iPalette As Long
WhiteColorindex = 0
For iPalette = 1 To 56
If oWB.Colors(iPalette) = &HFFFFFF Then
WhiteColorindex = iPalette
Exit Function
End If
Next iPalette
End Function

Private Function BlackColorindex(oWB As Workbook)
Dim iPalette As Long
BlackColorindex = 0
For iPalette = 1 To 56
If oWB.Colors(iPalette) = &H0 Then
BlackColorindex = iPalette
Exit Function
End If
Next iPalette
End Function

Private Function DecodeColorIndex(rng As Range, text As Boolean, idx As
_
Long)
Dim iColor As Long
If text Then
iColor = rng.font.ColorIndex
Else
iColor = rng.Interior.ColorIndex
End If
If iColor < 0 Then
iColor = idx
End If
DecodeColorIndex = iColor
End Function
 
S

spden1

Thanks for the quick reply Frank. Way too complicated for me - was jus
hoping to be able to do this with a simple formula. I have no idea ho
to use VBA
 
B

Bob Phillips

Frank Kabel said:
Hi
you need VBA for this. Using a procedure from Bob Phillips and Harlan
Grove you may try the
following:


To get the colorindex of a specific cell use
=ColorIndex(A1)

In your case maybe the formula
=IF(ColorIndex(A1)=3,A1*5,"don't know")
for multiplying red cells with 5

If you want the font colour, you need

=IF(ColorIndex(A1,True)=3,A1*5,"don't know")

as it defaults to cell colour.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top