使用 VLOOKUP 查找多个查找值,然后对输出求和

使用 VLOOKUP 查找多个查找值,然后对输出求和

例子:

我有一张列出各种食物卡路里含量的表格。

卡路里数据

在另一张表中,我列出了一顿饭中要用到的一些食物,并想计算出这顿饭的总卡路里数。

一顿饭

我如何查找膳食中每种食物的卡路里数据,然后将每个值加在一起?

我认为类似的方法=SUM(VLOOKUP(A2:A4,$Sheet1.A2:B13,2,0))可能会有用但不幸的是没有。

答案1

对 SUMIFS 求和:

=SUMPRODUCT(SUMIFS(Sheet1!B:B,Sheet1!A:A,A2:A5))

这将迭代膳食的各个部分,并对A2:A5SUMIFS 的输出进行求和。

答案2

使用 B 列通过 vlookup 获取卡路里计数,然后在列底部将其相加。

进餐后 B 细胞:

=vlookup(A2,$Sheet1!A:B,2,0)

然后对该列进行简单求和:

=总和(B2:B5)

你上面的功能可能通过使用 cntrl-shift-enter 来完成它并将句点更改为感叹号,将其作为数组函数工作。(未经测试)

答案3

在我的 Excel 版本中,SUM()运行良好(版本 2010(Build 13328.20292 Click-to-Run))。

然而,我无法测试这一点,这可能仅仅是因为这个版本具有该SPILL功能。

但是……那只是意味着您需要 {CSE} 或一个假设数组的函数,例如SUMPRODUCT()(其他答案正确使用)。然而……

当我使用它时,我必须使用数组作为其中的第二个因子。不能使用简单的 1 甚至 {1},因为VLOOKUP()(除了不“向左看”之外,它不值得被诽谤)正在使用输入数组。构建此类数组的方法多种多样,包括简单地在 {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} 中输入一个,也许可以处理多达 20 种成分。或者我们的老朋友ROW(1:LEN())适应了这种情况,也许,COUNTA()而不是LEN()。除了...

看来我的版本不喜欢非 SPILL 数组,即由非 SPILL 技术生成的数组。所以它失败了。但是,可以使用一个SPILL函数来强制执行这种情况,该函数实际上是专门为 SPILLing 构建的。

也就是说SEQUENCE()。我使用以下内容作为上述内容的简单版本,因此单元格地址需要调整,但除此之外,它已准备好投入生产:

=SUMPRODUCT(VLOOKUP(D1:D3,A1:B3,2,FALSE),  SEQUENCE(COUNTA(D1:D3),1,1,0)  )

(源表为 A1:B3,菜肴为 D1:D3。)

SEQUENCE()强制SUMPRODUCT()返回处理数组,而不是将传统的“数组中的第一个单元格(“左上角”)”作为其唯一输入。输入在一列中,因此COUNTA()首先是“,1”,而不是通常的相反方式。您只希望数组中有 1,因此起始值是下一个 1,并且您只希望有 1,因此最后一个参数步长值为 0。

旁注:一直很喜欢VLOOKUP()能够使用数组。从不喜欢它只能是“一个 VLOOKUP,一个数组”(德克萨斯数组手指的座右铭……)。(因此没有数组作为输入生成多个数组作为输出:就像这里一样,除了源数据可能还包括“碳水化合物、蛋白质、脂肪、纤维、等等等等”,并且人们还想要它们的总数,所有这些都来自(现在还有LET(),“在”)单个函数。当我写这个答案时想到了这一点,我突然想到,造成这种情况的根本原因,无论它是什么,可能是为什么像 这样的新函数XLOOOKUP()不能产生二维输出(更不用说三维或四维)的根本原因。希望不是,因为如果这里的原因就是那里的原因,那么他们不会很快修复它!

相关内容