Sei sulla pagina 1di 3

Colors in an IF Function

by Allen Wyatt
(last updated July 20, 2015)

25

Steve would like to create an IF statement (using the worksheet function) based on the color of a
cell. For example, if A1 has a green fill, he wants to return the word "go", if it has a red fill, he
wants to return the word "stop", and if it is any other color return the word "neither". Steve
prefers to not use a macro to do this.

Unfortunately, there is no way to acceptably accomplish this task without using macros, in one
form or another. The closest non-macro solution is to create a name that determines colors, in
this manner:

1. Select cell A1.


2. Click Insert | Name | Define. Excel displays the Define Name dialog box.
3. Use a name such as "mycolor" (without the quote marks).
4. In the Refers To box, enter the following, as a single line:

=IF(GET.CELL(38,Sheet1!A1)=10,"GO",IF(GET.CELL(38,Sheet1!A1)
=3,"Stop","Neither"))

5. Click OK.

With this name defined, you can, in any cell, enter the following:

=mycolor

The result is that you will see text based upon the color of the cell in which you place this
formula. The drawback to this approach, of course, is that it doesn't allow you to reference cells
other than the one in which the formula is placed.

The solution, then, is to use a user-defined function, which is (by definition) a macro. The macro
can check the color with which a cell is filled and then return a value. For instance, the following
example returns one of the three words, based on the color in a target cell:

Function CheckColor1(range)
If range.Interior.Color = RGB(256, 0, 0) Then
CheckColor1 = "Stop"
ElseIf range.Interior.Color = RGB(0, 256, 0) Then
CheckColor1 = "Go"
Else
CheckColor1 = "Neither"
End If
End Function

This macro evaluates the RGB values of the colors in a cell, and returns a string based on those
values. You could use the function in a cell in this manner:

=CheckColor1(B5)

If you prefer to check index colors instead of RGB colors, then the following variation will
work:

Function CheckColor2(range)
If range.Interior.ColorIndex = 3 Then
CheckColor2 = "Stop"
ElseIf range.Interior.ColorIndex = 4 Then
CheckColor2 = "Go"
Else
CheckColor2 = "Neither"
End If
End Function

Whether you are using the RGB approach or the color index approach, you'll want to check to
make sure that the values used in the macros reflect the actual values used for the colors in the
cells you are testing. In other words, Excel allows you to use different shades of green and red,
so you'll want to make sure that the RGB values and color index values used in the macros match
those used by the color shades in your cells.

One way you can do this is to use a very simple macro that does nothing but return a color index
value:

Function GetFillColor(Rng As Range) As Long


GetFillColor = Rng.Interior.ColorIndex
End Function

Now, in your worksheet, you can use the following:

=GetFillColor(B5)

The result is the color index value of cell B5 is displayed. Assuming that cell B5 is formatted
using one of the colors you expect (red or green), you can plug the index value back into the
earlier macros to get the desired results. You could simply skip that step, however, and rely on
the value returned by GetFillColor to put together an IF formula, in this manner:

=IF(GetFillColor(B5)=4,"Go", IF(GetFillColor(B5)=3,"Stop", "Neither"))


You'll want to keep in mind that these functions (whether you look at the RGB color values or
the color index values) examine the explicit formatting of a cell. They don't take into account any
implicit formatting, such as that applied through conditional formatting.

For some other good ideas, formulas, and functions on working with colors, refer to this page at
Chip Pearson's website:

http://www.cpearson.com/excel/colors.aspx

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (10780) applies to
Microsoft Excel 2007 and 2010. You can find a version of this tip for the older menu interface of
Excel here: Colors in an IF Function.

Potrebbero piacerti anche