在if语句(函数)中使用单元格的颜色作为条件

时间:2013-09-13 18:45:56

标签: excel function vba

我试图让一个单元格根据单元格的hilight颜色执行一个函数。

这是我目前的功能:

=IF(A6.Interior.ColorIndex=6,IF(ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,3,(M6/5)+2))),0)=0,0,ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,2,(M6/5)+2))),0)),IF(ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)=0,0,ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)))

因此,您不必仔细阅读所有内容,这是一个更简单的示例

=IF(A6.Interior.ColorIndex=6,"True","False")

他回来的只是#NAME? 。有什么方法可以将其作为单元格中的函数执行,还是绝对需要VBA?

谢谢,

约旦

5 个答案:

答案 0 :(得分:6)

您不能在公式中使用VBA(Interior.ColorIndex),这就是您收到错误的原因。

没有VBA就无法做到这一点。

Function YellowIt(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 6 Then
        YellowIt = True
    Else
        YellowIt = False
    End If
End Function

但是,我不建议这样做:不是如何使用用户定义的VBA函数(UDF)。它们应该反映Excel函数的行为,这些函数无法读取单元格的颜色格式。 (此功能在将来的Excel版本中可能无效。)

最好将公式建立在原始条件(决策)的基础上,使得单元格首先变为黄色。或者,或者,运行Sub过程以填充True或False值(当然,这些值将不再链接到原始单元格的格式)。

答案 1 :(得分:3)

我不相信有任何方法可以从公式中获取单元格的颜色。最接近的是CELL公式,但(至少从Excel 2003开始),它不会返回单元格的颜色。

使用VBA实现起来非常容易:

Public Function myColor(r As Range) As Integer
    myColor = r.Interior.ColorIndex
End Function

然后在工作表中:

=mycolor(A1)

答案 2 :(得分:2)

虽然这不能直接解决您的问题,但您实际上可以通过Excel中的单元格颜色对数据进行排序(这样可以很容易地以相同的方式标记具有特定颜色的所有记录,因此,对此标签进行条件化)。

在Excel 2010中,您可以通过转到数据 - &gt;来执行此操作。排序 - &gt;排序&#34;单元格颜色&#34;。

答案 3 :(得分:0)

我遇到了类似的问题,如果字体为黑色,我只需要显示另一个Excel单元格中的值。我创建了这个函数: `Option Explicit

函数blackFont(作为范围)作为布尔值     如果r.Font.Color = 0那么         blackFont = True     其他         blackFont = False     结束如果

结束功能 `

在我的手机中我有这个公式: =IF(blackFont(Y51),Y51," ")

这对我来说非常适合测试黑色字体,如果它有黑色字体,只显示Y51单元格中的值。

答案 4 :(得分:0)

我应用的唯一简单解决方案是重新创建将高亮显示为IF条件的主要条件,并在IF公式上使用它。像这样的东西。根据突出显示条件,公式将会改变,但我认为应该重新创建(例如,突出显示大于20)。

=IF(B3>20,(B3)," ")