【问题标题】:Sum values based on first occurrence of other column using excel formula使用excel公式根据第一次出现的其他列对值求和
【发布时间】:2017-07-25 15:22:26
【问题描述】:

假设我在 excel 电子表格中有以下两列

A   B
1   10
1   10
1   10
2   20
3   5
3   5

我想使用公式对 B 列中的值求和,该值表示 A 列中值的第一次出现。所以我希望得到以下结果:

result = B1+B4+B5 = 35

即求和列 B,其中任何唯一值存在于同一行但 A 列中。在我的情况下,如果 Ai = Aj,则 Bi=Bj,其中 i,j 表示行位置。这意味着如果 A 列中的两行具有相同的值,则 B 列中的对应值相同。我可以让值按 A 列的值排序,但我更喜欢有一个无论排序如何都有效的公式。

我发现这个post 指的是同样的问题,但我无法理解建议的解决方案。

【问题讨论】:

  • 你可能只是求和。我相信谷歌可以找到一个数组公式。
  • 我进行了几次搜索,但没有找到针对我的具体问题的解决方案。 This 是我找到的最近的一个,但不是我的确切问题。

标签: excel excel-formula


【解决方案1】:

使用 SUMPRODUCT 和 COUNTIF:

=SUMPRODUCT(B1:B6/COUNTIF(A1:A6,A1:A6))

这里是一步一步的解释:

  1. COUNTIF(A1:A6, A1:A6) 将生成一个具有值频率的数组:A1:A6。在我们的例子中,它将是:{3, 3, 3, 1, 2, 2}
  2. 那么我们要做如下除法:{10, 10, 10, 20, 5, 5}/{3, 3, 3, 1, 2, 2}。结果将是:{3.33, 3.33, 3.33, 20, 2.5, 2.5}。它将每个值替换为其组的平均值。
  3. 总结我们将得到的结果:(3.33+3.33+3.33) + 20 + (2.5+2.5=35)=35

使用上面的技巧,我们可以得到相同的结果,就像我们只是从列 A 中对每个组的第一个元素求和一样。


要使其动态化,使其随数据集增长和缩小,请使用:

=SUMPRODUCT($B$1:INDEX(B:B,MATCH(1E+99,B:B))/COUNTIF($A$1:INDEX(A:A,MATCH(1E+99,B:B)),$A$1:INDEX(A:A,MATCH(1E+99,B:B))))

【讨论】:

  • 它可以工作,但只是在包含确切的非空行时,如果我想为空行扩展公式,它就不起作用。例如,如果我删除最后一行,我会得到 #DIV/0!
  • 数据是否连续,值之间没有空格?
  • 是的,就我而言,中间没有空格,就在最后。
  • 它可以在末尾包含空行,唯一的是当所有列都为空时,我会收到有关循环引用的消息。我在一个模板文件中使用这个公式,该文件必须由另一个人填写,所以它适用于数据,但不能没有数据。
  • 然后将其包裹在IF(COUNT(B:B),formula,"")
【解决方案2】:

...或者只是 SUMPRODUCT。

=SUMPRODUCT(B2:B7, --(A2:A7<>A1:A6))

【讨论】:

  • 虽然 OP 确实说过,but I prefer to have a formula that works regardless of sorting.
  • 我复制了公式,得到的是 25 而不是 35。
  • 好吧,看看我是怎么做到的跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多