Excel Hack 42: Count cells by cell color

You probably may have received a 5,000 row database containing cells with multiple fill colors, and you really just want to find out how many cells are colored with a specific fill color.

There are two ways to get this done.

Approach 1: Create a table (select the entire range of data and Ctrl+T) or set up data filters (select the entire range of data and Ctrl+Shift+L). Click the now created drop-down in the column header and select Filter by Color

Automatically, this hides rows with other colors that do not match the criteria you selected in the Filter by Color, and in the status bar, you can see the number of rows that meet the color filter criteria

But what if you need this count status output in a cell? This brings us to Approach 2.

Approach 2: Use a User Defined Function. Excel does not have an in-built feature to count cells by color, but you can create a code to do this and print out the output to a cell.

User defined functions (UDF) are a type of VBA code that unlike subs, return their output into a cell. Once you program a UDF, it works just the same way a regular Excel function (e.g. =SUM(), =IF(), =VLOOKUP()) would work. Unlike these Excel functions however, it is not updated automatically and has to be executed afresh when the variables change.

UDFs, just like other VBA codes are programmed by navigating to the Visual Basic Editor (Developer>>Visual Basic or Alt+F11), inserting a new module, and placing the code within the created module:

The UDF to count cell colors is below:

Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)

' the above creates a function called "ColorFunction" with three variables in this order: rColor, rRange, SUM


Dim rCell As Range
Dim lCol As Long
Dim vResult

lCol = rColor.Interior.ColorIndex

If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else

For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell

End If

ColorFunction = vResult

End Function

Place the above code in the module, save your document as a macro-enabled format (.xlsm or .xlsb), return to the worksheet and use the function as shown below:

As seen above, the function takes two key variables – a cell with the fill color of interest, and the complete range of cells you wish to count. The result is below:

Note: Unlike regular Excel functions, this UDF is not automatically updated when the cell colors change. You have to step into the formula and hit ‘Enter’ to refresh its value when cell colors are updated.

Leave a Reply

Your email address will not be published. Required fields are marked *