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)
- 设置费用总额的范围(范围 2)
- 将范围 1 与 table 中的相应列进行比较,仅将匹配项的值相加
例如,在范围 1 (B6:B16) 中:
- BP
- 加德士
- 麦当劳
- 肯德基
在范围 2 (C6:C16) 中:
- 300
- 400
- 200
- 150
现在,我要做的就是将外卖(麦当劳、肯德基)的价值相加,并排除任何不符合条件的东西。
所以我的总数将是所有出现的 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_Name 和 expense_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 创建了插图,因此可能存在一些小差异,但逻辑是一样。
我在工作簿中有 2 sheets(Sheet1,Sheet2)。
Sheet 2 包含具有 5 列的 table(名为 Table1):
- 外卖
- 户数
- 服装
- 燃料
- 杂货
在 sheet 上,我有 2 列:
- 费用名称
- 费用总额
现在,我要做的是:
- 设置费用名称的范围(范围 1)
- 设置费用总额的范围(范围 2)
- 将范围 1 与 table 中的相应列进行比较,仅将匹配项的值相加
例如,在范围 1 (B6:B16) 中:
- BP
- 加德士
- 麦当劳
- 肯德基
在范围 2 (C6:C16) 中:
- 300
- 400
- 200
- 150
现在,我要做的就是将外卖(麦当劳、肯德基)的价值相加,并排除任何不符合条件的东西。
所以我的总数将是所有出现的 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_Name 和 expense_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 创建了插图,因此可能存在一些小差异,但逻辑是一样。