1

我使用下面的公式来计算总和。该公式仅计算在“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
4

0 回答 0