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

问题描述 投票:2回答:3

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

表2包含一个包含5列的表(Named Table1):

  • 小贴士
  • 家庭
  • 服装
  • 汽油
  • 杂货

在第一页上,我有两列:

  • 费用名称
  • 费用总计

现在,我想要做的是:

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

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

  • BP
  • 加德士
  • 麦当劳
  • 肯德基

在范围2(C6:C16)中:

  • 300
  • 400
  • 200
  • 150

现在,我想要做的就是为Takeaways(McDonalds,KFC)添加值,并排除任何与标准不符的内容。

所以我的总和将是所有出现的Takeaways - 只要它们列在我的表中 - 在这种情况下为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]为“麦当劳”,那么它会正确识别范围1中“McDonalds”这个词的每一个出现。

编辑:

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

这是包含引用的表:

enter image description here

该表包含以下数据:

enter image description here

式:

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

Cell 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(加德士旁边):=SUM(SUMIFS(C6:C16;B6:B16;"Caltex"))

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

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

excel vba excel-formula formula sumifs
3个回答
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等


3
投票

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

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

enter image description here

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

如果您这样设置,问题就会发生变化:您可以使用第二个表中的VLOOKUP()向第一个表中添加一个依赖列,该表显示每个收款人的类别(或“费用名称”)。

enter image description here

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

enter image description here

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


1
投票

我打算将此作为我自己的问题here的副本关闭,但我认为使用命名范围有一点不同。然而,这背后的逻辑或多或少采用相同的方法。

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

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

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


部分解决方案

我使用了以下公式:

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

该公式执行以下操作:

  • MATCH()check如果Range1中的值存在于表中并返回表中匹配值的位置。
  • qazxsw poi通过检查qazxsw poi函数是否返回一个数字来检查是否找到了匹配项
  • 将其与ISNUMBER()相乘,使用MATCH()函数强制矩阵计算

编辑:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.