SumIF使用表/命名范围而不是单个单元格条件

时间:2019-03-01 09:05:49

标签: excel vba excel-formula formula sumifs

我在工作簿中有两张纸(Sheet1,Sheet2)。

表2包含一个具有5列的表(名为Table1):

  • 外卖
  • 家庭
  • 服装
  • 燃油
  • 杂货

在第一页上,我有2列:

  • 费用名称
  • 费用总额

现在,我想做的是:

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

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

  • BP
  • Caltex
  • 麦当劳
  • 肯德基

在范围2(C6:C16):

  • 300
  • 400
  • 200
  • 150

现在,我要做的就是将外卖店(麦当劳,肯德基)的值相加,并排除不符合条件的内容。

因此,我的总和将是所有带走事件-如果在我的表中列出了这些情况-在这种情况下为350。

但是我似乎无法使公式生效。

我使用了以下来源:

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

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

并得出以下公式:

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

此来源:

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

并得出以下公式:

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

两个公式都返回0。

但是,如果我同时将Table1 [Takeaways]更改为“ McDonalds”,那么它们会正确地识别范围1中每次出现的“ McDonalds”一词。

编辑:

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

这是包含引用的表:

enter image description here

此表包含数据:

enter image description here

公式:

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

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

似乎公式中仅检测到了BP。

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

enter image description here

公式:

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

您似乎正在尝试跟踪费用,并且每个费用(或收款人)都被分配到一个类别(“外带”,“家庭”等)中。从relational-model的角度来看,您的第二张表(定义了每个费用/收款人的类别)应该只有两列(或变量):费用名称费用类别

enter image description here

您设置的表格(“表格2”)使用类别(即可能的值)作为不同的列(即变量)。但是只有一个变量,即“费用类别”,类别本身就是可能的值。

如果这样设置,问题就会改变:您可以在第一个表中添加一个从属列,以显示每个收款人的类别(或“费用名称”),第二个中使用VLOOKUP()桌子。

enter image description here

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

enter image description here

注意:我已经使用 LibreOffice Calc 创建了插图,因此可能会有一些细微差别,但是逻辑是相同的。

答案 1 :(得分:1)

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

尝试类似的操作

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

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

以上方法仅适用于垂直向量,但是更改命名范围,使2列的表格改为2个命名范围应该没问题-除非这是您要求的一部分

表2将变为 expense_Name expense_Total

答案 2 :(得分:1)

我打算将其作为我自己的问题here的副本来结束,但是我认为使用命名范围存在一些差异。但是,其背后的逻辑或多或少地遵循相同的方法。

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

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

COUNTIF()部分计算表中单元格值的出现次数。因此,请确保您的表中没有重复项。如果表中存在该值,则COUNTIF()的结果将为0。这样,我们将创建一个1和0的矩阵。通过相乘并使用SUMPRODUCT(),我们迫使excel执行矩阵计算并返回正确的结果。


部分解决方案

我使用以下公式:

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

该公式执行以下操作:

  • MATCH()检查表中是否存在Range1中的值,并返回匹配值在表中的位置。
  • ISNUMBER()通过检查MATCH()功能是否返回了数字来检查是否找到匹配项
  • 将其与Range2相乘会强制使用SUMPRODUCT()函数进行矩阵计算

编辑:

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

它把前两个值正确地加到了总和中,没有考虑到第四个值。