=VLOOKUP 会显示它找到的第一个值。但是,我的数据有多个匹配项,我想将它们相加,而不是只取第一个值。=SUMIFs 遇到的问题是它不允许我使用单元格引用。它要求我在公式中包含一个条件,但这很有挑战性,因为我有超过 500 个单元格需要引用。有没有办法查找单元格并汇总所有返回的值?
目前正在使用 office 365
答案1
您有些犹豫,在描述所需内容时有些自相矛盾。但第一行提到,VLOOKUP()
您只希望对部分数据进行求和。因此,有一列数据用于比较,并且您希望从包含找到的查找值的相同行中获得一些与之相关的数据。因此,假设数据位于 a 列和 B 列以及第 1 行至第 10 行。
传统的方法是进行涉及查找列的比较。它会将整个列与查找值进行比较,并返回一个 TRUE/FALSE 数组。您可以通过将结果乘以 1 将它们转换为 1 和 0。或者任何其他有用的值。对于乘数值,您可以使用返回列(我的示例范围中的 B 列):只是这些值的数组。
因此,乘法会将查找数组返回的 TRUE/FALSE 更改为数字,即 1 和 0。当您将它们乘以整个第二列的值时,您将得到一个数组,其中第一个数组中 FALSE 的任何位置都是 0,而实际值则来自返回列,因为 1*(任何值)=(任何值)。
现在,您有一个包含非 0 的数组,其中您的查找列与查找值匹配,而其中所有其他元素均为 0。这就是作用SUM()
所在。它会将这些元素相加,当然,那些 0(与查找值不匹配的项)不会为总和添加任何内容 — 只有查找列中匹配行的值才会有贡献。
这就是比赛的价值总和。
考虑到我在开始时提到的范围 A1:B10,它看起来像这样:
=SUM(B1:B10*(A1:A10="A"))
对于更复杂的需求,也许您想要的只是那些 >3 的返回值的总和,您只需添加一个执行该比较的乘法项:
=SUM(B1:B10*(A1:A10="A")*(B1:B10>=3))
对此的“现代”方法可以使用FILTER()
以下两个范围:
=SUM(FILTER(B1:B10,A1:A10="a"))
并非完全“简单”……但对于普通用户来说更容易掌握。不过请注意,在其中您正在执行一些通常不用于的操作,即从一列返回值,但使用另一列的比较。在很大程度上,它会根据使用其一列或某些列的某些比较返回整个结果表。这种用法更像是XLOOKUP()
允许您使用不相关的列的方式,事实上,其条件列(A1:A10="a"
部分)可以是任何数据集,既包含与源列一样多的项目,又可以让 Excel 将其作为范围。
让我谈谈最后一点。从您所说的内容中,我有点感觉到查找材料并非全部位于一列中,它可能被随意地放在各处。这源于您声称SUMIFS()
不会采用范围来构建标准,而当然,它肯定会采用范围。
给人的印象是您正在尝试赋予它一系列不同的细胞。
嗯,那行不通。但是,您可以使用任何合适的 Excel 技术来构建该范围:例如单元格或命名范围,然后引用该创建内容,而不是遍布各处的随意单元格。
我的意思是什么?简单的版本可能是您想要三个随机单元格作为范围。它们可能是 E20、G3 和 B244。选择一个不妨碍的地方,甚至是另一张表,然后输入一个单元格=E20
和下一个单元格(通常向下)=G3
,最后输入下一个单元格B244
。也许您从单元格 AHC1 开始并使用了 AHC1:AHC3。因此,当您需要范围时,您可以输入AHC1:AHC3
(或者AHC1#
即使SPILL
函数在您的情况下有效)。因此,虽然您不能直接输入该E20, G3, B244
范围,但您仍然可以使用它。或者也许您将其输入到命名范围中。无论您如何让 Excel 执行此操作,您都会得到最终结果。