我使用下面的公式来计算总和。该公式仅计算在“Paid?”列下的同一行中写入字符串“Yes”的那些值的总和。我还编写了自己的 UDF,它在给定范围内搜索具有给定背景颜色的单元格,并返回一个范围,该范围仅包含那些具有指定背景颜色的单元格。
=SUMIF(SelectRangeByColour(O5;M5:M35);"Yes";SelectRangeByColour(O5;I5:I35))
(如果您对分号感到困惑,这是 Excel 使用的标准列表分隔符,因为我的计算机语言是瑞典语。我尝试将其更改为逗号,但这没有帮助)
问题在于,在这种特定情况下,第一个“SelectRangeByColour”函数返回一个看起来像这样的范围:$M$5:$M$7;$M$15,第二个返回这个范围:$I$5:$I$7 ;$15 美元。但是,由于分号既用于分隔范围内的值,也用于分隔函数SUMIF中的不同参数,因此该函数最终会收到太多参数并输出#VALUE!错误。
这是SUMIF函数最终试图解析的内容:
=SUMIF($M$5:$M$7;$M$15;"Yes";$I$5:$I$7;$I$15)
因此它将$M$5:$M$7作为主要区域,$M$15作为条件,$I$5:$I$7作为可选总和区域,最后将$I$15作为不存在的额外参数.
但是,我希望SUMIF函数将$M$5:$M$7;$M$15作为主要区域,将“是”作为条件,最后将$I$5:$I$7;$I$15作为总和区域。我怎么能做到这一点?
以下是 UDF“SelectRangeByColour”中的代码,以防万一有帮助:
Function SelectRangeByColour(colourFilter As Range, rangeToSearch As Range) As Range
' Get the colour to filter by
colour = colourFilter.Interior.Color
' Initialize the finalRange to return from the function
Dim finalRange As Range
For Each cell In rangeToSearch
If cell.Interior.Color = colour Then
' If the finalRange is not empty, then add the current cell to it
If Not finalRange Is Nothing Then
Set finalRange = Union(finalRange, cell)
Else
' If final range is empty, set it equal to the current cell
Set finalRange = cell
End If
End If
Next
' In case nothing matches the given colour, set the range to the colour
' as not to display a #VALUE! error
If finalRange Is Nothing Then
Set finalRange = colourFilter
End If
Set SelectRangeByColour = finalRange
End Function