SumIF 使用 Table/Named 范围而不是单个单元格条件

SumIF Using Table/Named Range Instead of Single Cell Criteria

我在工作簿中有 2 sheets(Sheet1,Sheet2)。

Sheet 2 包含具有 5 列的 table(名为 Table1):

在 sheet 上,我有 2 列:

现在,我要做的是:

  1. 设置费用名称的范围(范围 1)
  2. 设置费用总额的范围(范围 2)
  3. 将范围 1 与 table 中的相应列进行比较,仅将匹配项的值相加

例如,在范围 1 (B6:B16) 中:

在范围 2 (C6:C16) 中:

现在,我要做的就是将外卖(麦当劳、肯德基)的价值相加,并排除任何不符合条件的东西。

所以我的总数将是所有出现的 Takeaways - 如果它们在我的 table 中列出 - 在这种情况下为 350。

但我似乎无法使公式起作用。

我使用了这些来源:

https://exceljet.net/excel-functions/excel-sumifs-function

Selecting a Specific Column of a Named Range for the SUMIF Function

最后得到这个公式:

=SUMIF($B:$B;Table1[Takeaways];C6:C16)

此来源:

https://excelchamps.com/blog/sumif-sumifs-or-logic/

最后得到这个公式:

=SUM(SUMIFS(C6:C16;B6:B16;Table1[Takeaways]))

两个公式return0.

但是,对于两者,如果我将 Table1[Takeaways] 更改为 "McDonalds",那么它会正确识别范围 1 中出现的单词 "McDonalds"。

编辑:

我更新了上面的公式以匹配下面的图片。

这是包含参考文献的 table:

此 table 包含数据:

公式:

单元格 C4(外卖旁边):=SUMIF($B:B;Table1[Takeaways];C6:C16)

单元格 C5(燃料旁边):=SUM(SUMIFS(C6:C16;B6:B16;Table1[Fuel]))

公式中似乎只检测到 BP。

这是一个输出 table 当我将公式与单个单元格引用而不是 table 或使用的范围一起使用时:

公式:

单元格 F4(BP 旁边):=SUMIF($B:B;"BP";C6:C16)

单元格 F5(Caltex 旁边):=SUM(SUMIFS(C6:C16;B6:B16;"Caltex"))

F6 单元格(麦当劳旁边):=SUMIF($B:B;"McDonalds";C6:C16)

单元格 F7(肯德基旁边):=SUM(SUMIFS(C6:C16;B6:B16;"KFC"))

没有看到 L 和 K 中的数据,我无法给你一个完整的答案——但这可能与你拉动数组的方式有关

尝试类似的东西

=SUMPRODUCT(SUMIFS($L:$L,$K:$K,CHOOSE({1,2},Takeaways,"anything else you wanted to sum")))

请记住 SUMIFS 适用于多个条件,因此如果您只计算一个条件,则需要 =SUMPRODUCT(SUMIF(

上述工作方式仅适用于垂直向量,但更改您的命名范围,使 2 列的 table 改为 2 个命名范围应该没问题 - 除非它是您要求的一部分

Table 2 会变成 expense_Nameexpense_Total

我正要将其作为我自己的问题的副本来关闭 ,但我认为使用命名范围有点不同。然而,这背后的逻辑或多或少遵循相同的方法。

进一步研究下面的部分解决方案,我得出以下公式:

=SUMPRODUCT(COUNTIF(Table1[Takeaways];Range1)*Range2)

COUNTIF() 部分计算单元格值在 table 中出现的次数。因此,请确保您的 table 中没有重复项。如果该值出现在 table 中,则 COUNTIF() 的结果将为 0。这样我们就创建了一个由 1 和 0 组成的矩阵。通过乘法和使用 SUMPRODUCT() 我们强制 excel 执行矩阵计算和 return 正确的结果。


部分解

我使用了以下公式:

=SUMPRODUCT(ISNUMBER(MATCH(Range1;Table1[Takeaways]))*Range2)

公式执行以下操作:

  • MATCH()检查 Range1 中的值是否存在于您的 table 中,并且 return 是匹配值在您的 table 中的位置。
  • ISNUMBER() 通过检查 MATCH() 函数是否 return 编辑了一个数字
  • 来检查是否找到匹配项
  • 将其与Range2相乘强制矩阵计算,使用SUMPRODUCT()函数

编辑:

这适用于非常有限的样本。一旦我将第四行添加到我的数据中,公式就会按预期停止工作。看截图:

它正确地将前两个值计入总和,没有考虑第四个。

如果我正确理解了您要实现的目标,我认为您的设置在概念上不正确。

您似乎在尝试跟踪支出,并且每笔支出(或收款人)都被分配到一个类别("Takeaways"、"Household" 等)。从 relational-model 的角度来看,您的第二个 table(定义每个 expense/payee 的类别)应该只有两列(或变量):费用名称 费用类别

您设置的 table ('Sheet 2') 使用类别(即可能的值)作为不同的列(即变量)。但是只有变量,即 "Expense Category",类别本身就是可能的值。

如果您这样设置,问题就会发生变化:您可以在第一个 table 中添加一个依赖列,显示每个收款人(或 "Expense Name")的类别,使用 VLOOKUP() 来自第二个 table.

然后您可以将符合该类别的所有收款人的费用相加。

注意:我使用 LibreOffice Calc 创建了插图,因此可能存在一些小差异,但逻辑是一样。