不同的数组总和如果自定义函数依赖于单元格值

时间:2015-09-25 08:08:24

标签: vba excel-vba excel

我有以下2个公式依赖于B列中的内容,但是我需要将其添加为UDF并且正在努力:

如果B3中的值为"Cat A",我使用此公式:

{=(((SUM(IF(('Photo Data'!$E$3:$E$2000='Summary'!$C3)*('Photo Data'!$F$3:$F$2000="Monthly Cost"),'Photo Data'!$G$3:$R$2000)))))}

如果值为"Cat B",我使用此公式:

{=(((SUM(IF(('Latest Data'!$G$3:$G$2000='Summary'!$C3)*('Latest Data'!$H$3:$H$2000="Monthly Cost")*('Latest Data'!$E$3:$E$1982="MAT"),'Latest Data'!$I$3:$T$2000,0)))))}

我将使用最新数据的动态范围&照片数据。我知道我可以在其中执行 if ,但我最终会有10个不同的类别(Cat A-J),并且想要开始使用UDF

由于

1 个答案:

答案 0 :(得分:0)

这可以让你开始使用你的十部分UDF。

Function udf_SumIfs(rCAT As Range)
    'application.volatile
    Dim sFORMULA As String
    Dim sWS As String, sRW As String

    sRW = rCAT.Row
    Select Case rCAT.Value2
        Case "Cat A"
            sFORMULA = "sum(if('×ws×'!$E$3:$E$2000='Summary'!$C×rw×, if('×ws×'!$F$3:$F$2000=""Monthly Cost"", '×ws×'!$G$3:$R$2000)))"
            sWS = "Photo Data"
            sFORMULA = Replace(Replace(sFORMULA, "×ws×", sWS), "×rw×", sRW)
            udf_SumIfs = Application.Evaluate(sFORMULA)
        Case "Cat B"
            sFORMULA = "sum(if('×ws×'!$G$3:$G$2000='Summary'!$C×rw×, if('×ws×'!$H$3:$H$2000=""Monthly Cost"", if('×ws×'!$E$3:$E$2000=""MAT"", '×ws×'!$I$3:$T$2000))))"
            sWS = "Latest Data"
            sFORMULA = Replace(Replace(sFORMULA, "×ws×", sWS), "×rw×", sRW)
            udf_SumIfs = Application.Evaluate(sFORMULA)
        Case Else
            udf_SumIfs = "no Cats allowed"
    End Select

End Function

Application Evaluate函数计算作为数组公式传递给它的每个公式,因此不需要指定任何特定于数组的公式。

我已离开Application.Evaluate method发表评论。如果未正确刷新UDF,请取消注释此代码行。通常UDF会在影响它的单元格发生更改时更新,这是不必要的,但是在UDf中对一些rage引用进行了硬编码,对它们的更改不会触发更新。

用作任何本机工作表公式。如,

=udf_SumIfs(B3)