基于一组ID对另一个工作表的值求和

时间:2012-12-04 13:14:35

标签: excel excel-2010

我想创建一个可以帮助人们记录饮食习惯的工作簿。该工作簿目前有两张纸,“食谱”和“日记”。

食谱有列ID,NAME,KCAL和PROTEIN。用户可以添加他们经常使用的任何食谱,并使用数字ID来引用它们。

日记有DATE,TOTAL_KCAL和TOTAL_PROTEIN列。这个想法是每个日期用户可以看到能量和蛋白质的总量。

我已经想出如何使用VLOOKUP()将配方表中的单个食谱的kcal和蛋白质量加到日记表中:

=VLOOKUP(1;Table1;3;FALSE) //For kcal

但我真的想自动化这一点。在这个阶段,如果我想使用这个工作表,我需要复制整个函数(并添加一个+前缀),将其粘贴到最后并将第一个参数更改为正确的ID。然后我必须重复这个过程到TOTAL_PROTEINS列(我需要记住将源参数从3更改为4)。

我想最好的情况是,如果日记表还有一些EATEN_RECIPES列,人们可以在其中添加ID列表(1,15,6),但我不知道这是否可以在Excel中实现。关键是,我希望能够将ID写入日记,并且excel会自动从食谱表中获取kcal和蛋白质量,并更新日记中的总量。

这可能是一件非常简单的事情,但我不知道在谷歌中使用哪些搜索词,对此的任何评论都表示赞赏。 (我还需要一个更好的标题。)

2 个答案:

答案 0 :(得分:2)

如果我了解您要正确执行的操作,可以使用您的副本和通过在您想要获取的数据前加上前缀来引用另一个工作表中的数据来粘贴问题!例如,如果您的数据在Sheet1中,在A1:A7的范围内,您可以在公式和函数中引用它:

Sheet1!A1:A7

至于ID列表......你可以尝试这个作为起点:

http://www.ozgrid.com/forum/showthread.php?t=86497

它进入自定义编码......你也可以让用户将每个id输入到不同的列中,但这是一个丑陋的黑客。

顺便说一句,听起来你正在做的是接近数据库领域......很多时候Excel表最终成为他们自己的迷你数据库。如果您对数据库感到满意,并且不介意工作,那么您可以考虑使用数据库。

答案 1 :(得分:0)

这是我最终的功能。基于user1161318提供的URL。 我知道它不是那么漂亮,但我只想让它工作,我是Visual Basic的新手。

Function MultiVLookup2(LookUpVal, LookUpRng As Range, LookUpCol As Long)

Dim v, w, i, rng As Range, sum As Single

v = Split(LookUpVal, ",")
sum = 0

ReDim w(UBound(v, 1))

For i = LBound(v, 1) To UBound(v, 1)
    w(i) = WorksheetFunction.VLookup(Val(v(i)), LookUpRng, LookUpCol, False)
Next i

For i = LBound(v, 1) To UBound(v, 1)
    sum = sum + w(i)
Next i

MultiVLookup2 = Round(sum, 1)

End Function