将多个不连续的范围组合到一个命名范围中以清理公式

时间:2014-08-11 17:54:22

标签: excel range

我有一个我使用的配方很好用,但我想清理它。

=SUMIF(IB02R, A56, IB02P)+SUMIF(IB03R, A56, IB03P)+SUMIF(IB04R, A56, IB04P)

IB02RIB03RIB04R& IB02PIB03PIB04P是我在名称管理器中定义的范围。他们看着整行。

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)IB0234RIB0234PIB02R中包含的范围,等等。

该公式用于查找特定单元格与3个不同行中的每个单元格之间的匹配。第4,7和10行。

如果在这些行中的任何地方存在匹配,则它分别对行5,8和11中的相应值进行求和。

我的两个公式都有效,但为了便于阅读和清晰起见,我想进行简化。

这可能吗?我尝试了几种不同的方法,但没有成功。

2 个答案:

答案 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)

此功能将基于以下假设起作用:

  1. 条件范围的分割方式与和范围相同(在您的情况下是)
  2. 它没有考虑到你的总和范围内的非数字数据等会破坏这个功能的事情
  3. 这是一个快速而肮脏的解决方案,可以使其更加强大,但它可以工作!!

    所以,再说一次,我肯定会选择Rick的解决方案,但我是为了完整而添加这个解决方案。缘故。