【问题标题】:SUM columns on the same sheet based on conditions or SUMIFS from another sheet基于条件的 SUM 同一工作表上的列或来自另一个工作表的 SUMIFS
【发布时间】:2020-06-20 03:48:32
【问题描述】:

这是一个小样本表

+--------+-------+--------+
| COL 1  | COL 2 | COL 3  |
+--------+-------+--------+
| abc123 | Total |        |
+--------+-------+--------+
| abc123 | cat1  | 100.00 |
+--------+-------+--------+
| abc123 | cat2  | 200.00 |
+--------+-------+--------+
| def123 | Total |        |
+--------+-------+--------+
| def123 | cat1  | 100.00 |
+--------+-------+--------+
| def123 | cat2  | 200.00 |
+--------+-------+--------+

在 COL 3 中,如果 COL 2 为“总计”,我需要对 COL1 中相同的每一行在 COL 3 中的所有内容求和。 (例如,对于 abc123,COL3 总行应该是 300.00,然后对于 def123 应该是 300.00)否则,如果 COL 2 不是“总”,我需要做SUMIFS('Sheet3'!N:N,'Sheet3'!A:A,Sheet2!A473,'Sheet3'!Q:Q,Sheet2!Q473)*Sheet4!$U$2)

我怎样才能完成 SUM 的第一部分?

编辑:

我认为我的例子太死板了,看起来像是固定的。

让我看看我是否可以用更流畅的术语来解释。我将不得不用数据库术语来描述这一点。出于“总计”部分的目的,所有列都在一张纸上。

COL 1 是我的分区。 COL 1 中的每个“ID”由 57 行组成。这 57 行中有 1 行是另一列中的“总计”,在示例中为 COL 2。

所以我有一个大表,在 COL 1 中有 5 个不同的 ID,每个 ID 有 57 行,因此有 285 行。

现在我有了一个排序功能,它可能会使整个事情变得更容易,但该功能会使 excel 崩溃并且不能对所需的两种排序进行排序 (https://techcommunity.microsoft.com/t5/excel/sort-function-causes-a-crash-and-does-not-perform-secondary-sort/m-p/1477123#M66205)

我想如果我可以让排序功能停止崩溃 excel,这会变得稍微容易一些,因为“总计”始终放在第 2、58、116 行等中,我可以将它下面的所有内容相加。现在,因为这种排序不起作用,我必须将 COL 3 中未分配给 COL 2 中“Total”且在 COL1 中具有相同 ID 的所有内容相加。

所以在上面的表格中 abc123 是 3 行,我需要将 abc123 不总计的两行相加,并将公式吐出 300 到 COL 3 中。

那么 def123 需要同样的处理。

这是困难的部分:排序不一致,因为数据来自 Redshift 查询,因此每个 ID 都是随机的。 ID 本身是随机顺序的。我想我可以让 COL 1 的排序工作而不会导致 excel 崩溃,但是使用自定义顺序的二级排序会导致它崩溃。

【问题讨论】:

  • 应该读作'if COL 2 is NOT "Total"',而不是'if COL 3 is NOT "Total"'
  • 假定您已经尝试过使用直接的SUMIFS,但遇到了循环引用的问题?如果是这样,那(即“你已经尝试过什么”)将是包含在问题中的好信息。
  • 您介意重新表述您的问题陈述或分享输出表以便更好地理解吗?
  • 另外,这个代码是在Sheet2Sheet3Sheet4 还是在第四张纸上(Sheet1?)我不太确定相对引用应该是什么最终公式...
  • @Belle 输出表在 COL3 中只有一个公式,其中 COL2 = 每个 COL1“ID”的 SUMS COL3 的总和,因此 COL3 第 2 行为 300.00,COL3 第 5 行为 300.00。如果我真的需要为此做一张桌子,我想我可以。错字已修复

标签: excel excel-formula


【解决方案1】:

在尝试汇总列时避免循环引用错误的一种方法是使用 两个 总和,一个在上面,一个在下面。

因此,假设您的第 1、2 和 3 列是 A、B 和 C,并且数据从第 2 行开始(第 1 行是标题),您需要上方的单元格总和当前行:

SUMIFS(C$1:C1, A$1:A1, A2)

加上当前行下面单元格的总和:

SUMIFS(C3:INDEX(C:C, 1+COUNTA(A:A)), A3:INDEX(A:A, 1+COUNTA(A:A)), A2)

(请注意,这实际上会终止数据集上方下方的一行)

将其与IF 声明放在一起:

=IF(B2="Total", SUMIFS(C$1:C1, A$1:A1, A2) + SUMIFS(C3:INDEX(C:C, 1+COUNTA(A:A)), A3:INDEX(A:A, 1+COUNTA(A:A)), A2), EXISTING_FORMULA_HERE)

或者,您可以尝试编写一个数组公式来直接计算SUM,有点像在MATCH 中使用多个条件时,如下所示:(问题中没有足够的信息来准确地做到这一点)

=SUMPRODUCT('Sheet3'!N:N*(COUNTIFS(A:A,'Sheet3'!$A:A)>0)*(COUNTIFS(B:B,'Sheet3'!$Q:Q)>0))

(当当前工作表中存在与 A 列中的 Sheet3!A:A 列和 B 列中的 Sheet3!Q:Q 列匹配时,Sheet3!N:N 的总和)

请注意,使用数组公式处理整列非常慢,因此您可能希望将其限制在已用范围内

【讨论】:

  • 我觉得我的例子有点太死板了。总数并不总是在第 2 行。让我看看我是否可以编辑问题以获得更流畅的清晰度
  • @Shenanigator 当您将其向下拖动时,此公式将适用于任何行 - IF 语句用于检测这是否是 Total 行。为第 2 行编写它是最简单的。
  • 好吧,让我给出一个更全面的表格,这样你就可以明白为什么我认为这不会按照它需要的方式工作,至少在没有排序的情况下。给我一些来构建一个更大的示例表。
  • ufile.io/6377g1jd 这是一个示例 CSV。大部分是真实数据,只是经过编辑以通过重命名来保持机密数据的机密性。我会在问题中发布整个表格,但似乎过度
猜你喜欢
  • 2014-11-02
  • 2017-01-14
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多