0

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

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

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

我已经想出了如何使用 VLOOKUP() 从食谱表中获取单个食谱的千卡和蛋白质量到日记表中:

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

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

我想最佳情况是如果日记表也有一些 EATEN_RECIPES 列,人们可以在其中添加 ID 列表 (1,15,6),但我不知道这在 excel 中是否可行。关键是,我希望能够在日记中记下 ID,并让 Excel 自动从食谱表中获取千卡和蛋白质含量,并更新日记中的总量。

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

4

2 回答 2

2

如果我理解您正在尝试正确执行的操作,您可以通过在要获取的数据前加上 ! 来引用另一张表中的数据来解决您的复制和粘贴问题。例如,如果您的数据在 Sheet1 中,在 A1:A7 的范围内,您可以在公式和函数中引用它:

Sheet1!A1:A7

至于 ID 列表...您可以尝试以此为起点:

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

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

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

于 2012-12-04T13:26:41.490 回答
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
于 2012-12-04T20:51:40.590 回答