使用SUMPRODUCT检查彩色单元格

我正在计算有色单元的数量(也满足另一个条件)。

我的单元格如下:

在这里输入图像描述

我的意图是计数有一个'B'的细胞,其中相邻的细胞是绿色的。

我还写了一个函数如下:

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

然后我使用SUMPRODUCT函数如下:

 =SUMPRODUCT(--(V40:V50="B");--CheckColor(W40:W50)) 

但是,我收到错误#VALUE!

UPDATE

我修改了我的公式如下:

 Function CheckColor(rng As Range) As Variant Dim arr As Variant Dim n As Integer ReDim arr(0 To rng.Count - 1) As Variant n = 0 For Each cell In rng If cell.Interior.ColorIndex <> 43 Then bl = False Else bl = True End If arr(n) = bl n = n + 1 Next cell CheckColor = arr End Function 

我使用的公式如下:

 =SUMPRODUCT((V40:V50="B")*CheckColor(W40:W50)) 

我得到的答案是6,这是错误的。

列范围的数组有些不同Variant(1 To 11, 1 To 1)

 Function CheckColor(rng As Range) Dim arr() ReDim arr(1 To rng.Count, 1 To 1) ' arr = rng.Value2 ' arr Type in the Locals window shows as Variant(1 To 11, 1 To 1) For i = 1 To rng.Cells.Count arr(i, 1) = rng.Cells(i, 1).Interior.ColorIndex = 43 Next i CheckColor = arr End Function 

你可以做到这一点没有VBA,但你需要一个“帮手”列。

使用名称CellColour和公式=GET.CELL(63,Sheet1!$B1)创build一个命名范围,

使用您的示例(假定它从单元格A1开始),请在单元格C1:C11: =CellColourinput此公式。 通过你的屏幕截图的外观应该返回43绿色。

然后你可以使用这个公式来计算列B中列A的绿色: =COUNTIFS($A$1:$A$11,"B",$C$1:$C$11,43)

背景颜色: 如何计算一个范围内的值小于Excel中另一个单元格的单元格?

字体颜色: Excel公式来获取单元格颜色

编辑,更正

在这个函数中,你可以给这个函数一个范围,并把它和一个ColorIndex进行比较。 这意味着你问整个范围是否有颜色索引而不是细胞之间。

如果Excel自动引用正确的单元格并将它们与值进行比较,你会做的工作,但我不会为你做。

所以你可以用不同的方法来pipe理这个。 首先,你不需要vba,就像Darren Bartrup-Cook的意思,你可以用一个帮助栏来做,就像

  =If(V40="B";CheckColor(W40) 

然后用Countif数出真正的值,或者用VBA编写它,然后你需要像这样一个一个地循环单元格:

 For x = 1 to 50 If Cells(x,10).Value = "b" AND Cells(x,11).ColorIndex = 43 Then counter = counter + 1 Next x Endif