我在工作簿中有2张(Sheet1,Sheet2)。
表2包含一个包含5列的表(Named Table1):
在第一页上,我有两列:
现在,我想要做的是:
例如,在范围1(B6:B16)中:
在范围2(C6:C16)中:
现在,我想要做的就是为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”这个词的每一个出现。
编辑:
我已更新上面的公式以匹配下面的图像。
这是包含引用的表:
该表包含以下数据:
式:
Cell C4(Takeaways旁边):=SUMIF($B$6:B$16;Table1[Takeaways];C6:C16)
Cell C5(燃料旁边):=SUM(SUMIFS(C6:C16;B6:B16;Table1[Fuel]))
似乎只在公式中检测到了BP。
当我使用具有单个单元格引用的公式而不是表或使用范围时,这是一个输出表:
式:
细胞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"))
没有看到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等
如果我理解你想要实现的目标,我认为你的设置在概念上是不正确的。
看起来您正在尝试跟踪费用,并且每个费用(或收款人)都分配到一个类别(“Takeaways”,“Household”等)。从relational-model的角度来看,您的第二个表(定义每个费用/收款人的类别)应该只有两列(或变量):费用名称和费用类别。
您设置的表('表2')使用类别(即可能的值)作为不同的列(即变量)。但是只有变量,即“费用类别”,类别本身就是可能的值。
如果您这样设置,问题就会发生变化:您可以使用第二个表中的VLOOKUP()
向第一个表中添加一个依赖列,该表显示每个收款人的类别(或“费用名称”)。
然后,您可以将与该类别匹配的所有收款人的费用相加。
注意:我使用LibreOffice Calc创建了插图,因此可能存在一些小的差异,但逻辑是相同的。
我打算将此作为我自己的问题here的副本关闭,但我认为使用命名范围有一点不同。然而,这背后的逻辑或多或少采用相同的方法。
进一步研究下面我的部分解决方案,我得到了以下公式:
=SUMPRODUCT(COUNTIF(Table1[Takeaways];Range1)*Range2)
COUNTIF()
部分计算表中单元格值的出现次数。因此,请确保表中没有重复项。如果表中存在该值,则COUNTIF()
的结果将为0.这样我们就创建了一个1和0的矩阵。通过乘以和使用SUMPRODUCT()
,我们强制excel执行矩阵计算并返回正确的结果。
部分解决方案
我使用了以下公式:
=SUMPRODUCT(ISNUMBER(MATCH(Range1;Table1[Takeaways]))*Range2)
该公式执行以下操作:
MATCH()
check如果Range1中的值存在于表中并返回表中匹配值的位置。ISNUMBER()
相乘,使用MATCH()
函数强制矩阵计算编辑:
这适用于非常有限的样本。一旦我将第四行添加到我的数据中,公式就会按预期停止工作。见截图:Range2
前两个值正确地计入总和,第四个没有考虑在内。