Excel 基于一组ID对另一张图纸的值求和

Excel 基于一组ID对另一张图纸的值求和,excel,excel-2010,Excel,Excel 2010,我想创建一个工作簿,帮助人们记录他们的饮食习惯。该手册目前有两张纸,“食谱”和“日记” Recipes有ID、NAME、KCAL和PROTEIN列。用户可以添加他们经常使用的任何配方,只需使用数字ID引用即可 日记有日期栏、总热量栏和总蛋白质栏。这个想法是,用户可以看到每次约会所消耗的能量和蛋白质总量 我已经知道了如何使用VLOOKUP()将配方表中单个配方的kcal和蛋白质量输入到日记表中: 但我真的想让它自动化一点。在这个阶段,如果我想使用这个表,我需要复制整个函数(并添加一个+前缀),将它

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

Recipes有ID、NAME、KCAL和PROTEIN列。用户可以添加他们经常使用的任何配方,只需使用数字ID引用即可

日记有日期栏、总热量栏和总蛋白质栏。这个想法是,用户可以看到每次约会所消耗的能量和蛋白质总量

我已经知道了如何使用VLOOKUP()将配方表中单个配方的kcal和蛋白质量输入到日记表中:

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

我想最好的情况是,如果日记本上也有一些Eat_RECIPES列,人们可以在其中添加ID列表(1,15,6),但我不知道这在excel中是否可行。关键是,我希望能够写下一个ID到日记,让excel自动从配方表中获取kcal和蛋白质含量,并更新日记中的总量


这可能是一个很简单的问题,但我不知道在谷歌使用什么搜索词,对此的任何评论都将不胜感激。(我还需要一个更好的标题。)

如果我了解您正试图正确执行的操作,您可以通过在另一个工作表中的数据前面加上要获取的数据来解决复制和粘贴问题!。例如,如果您的数据在表1中,范围为A1:A7,则您可以在公式和函数中使用以下内容引用它:

Sheet1!A1:A7
至于ID列表。。。您可以尝试将此作为起点:

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


顺便说一句,听起来你正在做的是接近数据库领域。。。通常,Excel工作表最终成为自己的迷你数据库。如果您对数据库感到满意,并且不介意这项工作,您可以考虑改用数据库。

这是我最后使用的功能。基于user1161318提供的URL。 我知道它没有那么漂亮,但我只是想让它工作起来,我对VisualBasic还不熟悉

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

非常感谢你的网址,这帮了大忙!我的问题有点不清楚,但你的回答帮助了我。
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