我有一个我使用的配方很好用,但我想清理它。
=SUMIF(IB02R, A56, IB02P)+SUMIF(IB03R, A56, IB03P)+SUMIF(IB04R, A56, IB04P)
IB02R
,IB03R
,IB04R
& IB02P
,IB03P
,IB04P
是我在名称管理器中定义的范围。他们看着整行。
IB02R
查看另一张表的B4-ND4
IB02P
查看另一张表的B5-ND5
等等。
这是原始公式:
=SUMIF('2014'!$A$4:$ND$4,A75,'2014'!$A$5:$ND$5)+SUMIF('2014'!$A$7:$ND$7,A75,'2014'!$A$8:$ND$8)+SUMIF('2014'!$A$10:$ND$10,A75,'2014'!$A$11:$ND$11)
我想简化这个以结合所有R和P'而不是有3个sumif语句我可以=SUMIF(IB0234R, A56, IB0234P)
。 IB0234R
和IB0234P
是IB02R
中包含的范围,等等。
该公式用于查找特定单元格与3个不同行中的每个单元格之间的匹配。第4,7和10行。
如果在这些行中的任何地方存在匹配,则它分别对行5,8和11中的相应值进行求和。
我的两个公式都有效,但为了便于阅读和清晰起见,我想进行简化。
这可能吗?我尝试了几种不同的方法,但没有成功。
答案 0 :(得分:4)
这是你的公式:
=SUMPRODUCT((CHOOSE({1;2;3},'2014'!$A$4:$ND$4,'2014'!$A$7:$ND$7,'2014'!$A$10:$ND$10)=A56)*CHOOSE({1;2;3},'2014'!$A$5:$ND$5,'2014'!$A$8:$ND$8,'2014'!$A$11:$ND$11))
这需要花一点点范围命名范围,以使其可读,但它绝对可行。
首先,结合"第一行"将每个部分组合成另一个命名范围,如下所示:
=CHOOSE({1;2;3},IB02R,IB03R,IB04R)
- 我们称之为IB00R
现在对"第二行":
执行相同的操作 =CHOOSE({1;2;3},IB02P,IB03P,IB04P)
- 我们称之为IB00P
现在公式变为:
=SUMPRODUCT((IB00R=A56)*IB00P)
为了确切了解公式的工作原理,我建议单击“公式”选项卡上的“评估公式”,然后单步执行,然后单步执行命名范围。
编辑:好的,我现在怀疑自己 - 不确定这是否正常。我知道它会起作用,因为我以前做过,但下面的公式可能不太对。我会稍微弄清楚。
编辑2:如上所述,这不起作用。但是,有一种方法可以解决问题,但我无法记住它是什么。仍在摆弄它。如果我无法弄清楚,我会删除这个答案。
编辑3:现在工作。我忘记了,为了组合不连续的行,你必须使用CHOOSE()
而不是INDEX()
抱歉这是错误的开始。
答案 1 :(得分:2)
仅供参考,我绝对像Rick的回答更多,但我承认他所做的对我来说是新的(这就是为什么我喜欢这个网站! !),所以我只知道如何使用VBA。
使用VBA,您可以使用的功能如下:
Function Disjoined_SumIf(CriteriaRange As Range, Criteria As Range, SumRange As Range) As Double
Dim ar As Integer
Dim cl As Integer
For ar = 1 To CriteriaRange.Areas.Count
For cl = 1 To CriteriaRange.Areas(ar).Cells.Count
If CriteriaRange.Areas(ar).Cells(cl).Value = Criteria.Value Then Disjoined_SumIf = Disjoined_SumIf + SumRange.Areas(ar).Cells(cl).Value
Next cl
Next ar
End Function
您可以在电子表格中将其用作=Disjoined_SumIf(IB0234R, A56, IB0234P)
此功能将基于以下假设起作用:
这是一个快速而肮脏的解决方案,可以使其更加强大,但它可以工作!!
所以,再说一次,我肯定会选择Rick的解决方案,但我是为了完整而添加这个解决方案。缘故。