Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用SUMPRODUCT检查彩色单元格_Excel_Excel Formula_Vba - Fatal编程技术网

Excel 使用SUMPRODUCT检查彩色单元格

Excel 使用SUMPRODUCT检查彩色单元格,excel,excel-formula,vba,Excel,Excel Formula,Vba,我试图计算彩色单元格的数量(也满足另一个条件) 我的手机如下: Function CheckColor(rng As Range) As Boolean If rng.Interior.ColorIndex = 43 Then CheckColor = True Else CheckColor = False End If End Function =SUMPRODUCT(--(V40:V50="B");--CheckCo

我试图计算彩色单元格的数量(也满足另一个条件)

我的手机如下:

    Function CheckColor(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 43 Then
        CheckColor = True
    Else
        CheckColor = False
    End If
    End Function
=SUMPRODUCT(--(V40:V50="B");--CheckColor(W40:W50))
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))

我的目的是计算有“B”的单元格和相邻单元格为绿色的单元格

我还编写了一个函数,如下所示:

    Function CheckColor(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 43 Then
        CheckColor = True
    Else
        CheckColor = False
    End If
    End Function
=SUMPRODUCT(--(V40:V50="B");--CheckColor(W40:W50))
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))
然后我使用
SUMPRODUCT
函数,如下所示:

    Function CheckColor(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 43 Then
        CheckColor = True
    Else
        CheckColor = False
    End If
    End Function
=SUMPRODUCT(--(V40:V50="B");--CheckColor(W40:W50))
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))
但是,我得到一个错误
#值

更新

我修改了我的公式如下:

    Function CheckColor(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 43 Then
        CheckColor = True
    Else
        CheckColor = False
    End If
    End Function
=SUMPRODUCT(--(V40:V50="B");--CheckColor(W40:W50))
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,这是错误的。

您可以在没有VBA的情况下执行此操作,但您需要一个“帮助器”列

使用名称
CellColour
和公式
=GET.CELL(63,Sheet1!$B1)

使用您的示例(假设它从单元格A1开始),在单元格C1:C11:
=CellColour
中输入此公式。根据屏幕截图的外观,它应该返回43为绿色

然后,您可以使用此公式计算B列中带绿色的A列:
=COUNTIFS($A$1:$A$11,“B”,$C$1:$C$11,43)

背景色:

字体颜色:

编辑、更正

在函数中,为函数指定一个范围,并将其与颜色索引进行比较。这意味着您询问整个范围是否具有颜色索引,而不是之间的单元格

如果Excel自动引用正确的单元格并将其与值进行比较,那么您所做的工作将起作用,但我不会为您这样做

所以你可以用不同的方法来管理它。首先,您可以在没有像Darren Bartrup Cook Meanion这样的vba的情况下完成它,您可以使用一个helper列来完成它,并像这样编写它

 =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

列范围的数组有点不同
变量(1到11,1到1)


你为什么不使用
COUNTIF
而不是
SUMPRODUCT
?我在谷歌上搜索并阅读到SUMPRODUCT可以更好地容纳函数我认为(但不确定)你的函数是将CheckColor(W40:W50)
作为一个唯一值来计算的,所以这样做
=SUMPRODUCT(-(V40:V50=“B”);0)
由于参数大小不同,将抛出一个
#值
;你有能力尝试一步一步的公式计算吗?哦!我现在明白了。但我仍在学习VBA,所以我不确定如何实现它可能
=SUMPRODUCT((V40:V50=“B”)*CheckColor(W40:W50))
?我想你已经明白了。这仅适用于传递的范围的第一列。例如,对于
A3:C3
它将只检查
A3:A3