Steve希望根据单元格的颜色创建一个IF语句(使用工作表功能)。例如,如果A1填充为绿色,则他想返回单词“ go”,如果填充为红色,则他想返回单词“ stop”,如果它是其他颜色,则返回单词“ noth”。 。史蒂夫(Steve)宁愿不使用宏来执行此操作。

不幸的是,如果不使用一种或另一种形式的宏,就无法令人满意地完成此任务。最接近的非宏解决方案是以这种方式创建一个确定颜色的名称:

。选择单元格A1。

。单击插入|姓名|定义。 Excel将显示“定义名称”对话框。

。使用诸如“ mycolor”的名称(不带引号)。

。在“引用到”框中,作为一行输入以下内容:

。单击确定。

定义此名称后,您可以在任何单元格中输入以下内容:

=mycolor

结果是您将看到基于您放置此公式的单元格颜色的文本。当然,这种方法的缺点是它不允许您引用除放置公式的单元格以外的其他单元格。

因此,解决方案是使用用户定义的函数,该函数是(按定义)宏。宏可以检查单元格填充的颜色,然后返回一个值。例如,以下示例根据目标单元格中​​的颜色返回三个单词之一:

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

此宏评估单元格中颜色的RGB值,并根据这些值返回一个字符串。您可以通过以下方式在单元格中使用该函数:

=CheckColor1(B5)

如果您希望检查索引颜色而不是RGB颜色,则可以使用以下变体:

Function CheckColor2(range)

If range.Interior.ColorIndex = 3 Then         CheckColor2 = "Stop"

ElseIf range.Interior.ColorIndex = 14 Then         CheckColor2 = "Go"

Else         CheckColor2 = "Neither"

End If End Function

无论您使用的是RGB方法还是颜色索引方法,都需要检查以确保宏中使用的值反映所测试单元格中用于颜色的实际值。换句话说,Excel允许您使用不同的绿色和红色阴影,因此您需要确保宏中使用的RGB值和颜色索引值与单元格中的颜色阴影所使用的颜色相匹配。

一种实现方法是使用一个非常简单的宏,该宏除了返回颜色索引值外什么也不做:

Function GetFillColor(Rng As Range) As Long     GetFillColor = Rng.Interior.ColorIndex End Function

现在,在工作表中,您可以使用以下命令:

=GetFillColor(B5)

结果是显示单元格B5的颜色索引值。假定单元格B5是使用您期望的一种颜色(红色或绿色)格式化的,则可以将索引值重新插入到较早的宏中以获得所需的结果。但是,您可以简单地跳过该步骤,并以这种方式依靠GetFillColor返回的值来组合IF公式:

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

您将要记住,这些函数(无论您查看的是RGB颜色值还是颜色索引值)都会检查单元格的显式格式。他们不考虑任何隐式格式,例如通过条件格式应用的格式。

有关使用颜色的其他一些好主意,公式和函数,请参阅Chip Pearson网站上的以下页面:

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

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(10779)适用于Microsoft Excel 97、2000、2002和2003。您可以在以下位置找到适用于Excel功能区界面(Excel 2007和更高版本)的本技巧的版本:

链接:/ excelribbon-Colors_in_an_IF_Function [IF函数中的颜色]。