我有以下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
由于
答案 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)