将成分数量数据排列在一行中,以便在其他地方检索

时间:2017-12-15 10:04:20

标签: google-sheets lookup

我想在Google表格上实施一个表格,其中包含不同数据的行,其中两个字段是相关数组,我想知道实现它的最佳方式。有三种不同的纸张,名为Recipies,Ingredients and Dishes。 Recipies包含菜肴的名称和成分列表,Ingredients包含每种成分的营养信息,Dishes包含每份食物的实际营养信息。

Recipies Sheet我希望尽可能保持可读性和可视性:

Name  Time   Ingredients
Pasta 20min  {150 spaghetti, 30 sauce, 5 marjoram, 20 cheese}

菜:

Name  Prot.  Carb.  Fat  KCal
Pasta    x      x     x     x

我想得到收件人'成分和数量数据,查找其营养成分,并在菜单表上总和数量。成分表看起来像:

Ingredient Prot.  Carb.  Fat KCal
Pasta         x      x     x    x
Marjoram      x      x     x    x

如果成分和数量分成两行,每一行在不同的列中,我想知道如何从不同的表中获取行数据,比如将菜蛋中的总蛋白量相加:

=ArrayFormula(SUM(LOOKUP(F5:K5;Ingredients!$B$4:$B$1000;Ingredients!$D$4:$D$1000)*((F6:K6)/100)))/E5

我遇到的问题是我想要在一行中列出成分和数量,例如{150意大利面,30酱,5马郁兰,20奶酪}。我想让它一目了然。我试图使用数组,但不知道如何使其工作。

如何才能最好地将数据排列在一行中,并能够使用它来查找其他工作表上的数据?

1 个答案:

答案 0 :(得分:1)

理想情况下,您可以使用结构形式输入每个配方的数据,例如成分数量表,然后通过使用{{从数据构建文本字符串,以可读形式显示它1}}或类似的。一般的想法是,结构化数据应该是信息的来源,而为人类消费而展示的东西则源于此。

但如果你坚持使用" 150意大利面,30酱,5马郁兰,20奶酪和#34;作为信息来源,这里有一种计算营养成分的方法。

假设A:B是一种成分 - 营养成分表,例如

join

和细胞E2有" 150意大利面,30酱,5马郁兰,20奶酪"。以下公式计算了该配方中的蛋白质含量:

Ingredient  Protein
spaghetti   2
sauce       4
eggs        10
cheese      6
marjoram    2

说明:

  • 第一个split-regexreplace组合提取配方中的所有单词,通过用空格替换数字和标点,然后按空格分割。我们得到了四个单词:意大利面,酱汁,马郁兰,奶酪
  • 然后,vlookup查找蛋白质含量(范围A:B中的第2列)。如果你还有脂肪,卡路里,碳水化合物等,那么查找范围将是A:E,并且要使用的列将是2,3,4,5中的一个。
  • 第二个split-regexreplace提取成分的数量,它从公式中删除不是数字的所有内容
  • =sumproduct( vlookup(split(regexreplace(E2, "[\d\W]+", " "), " "), A:B, 2, 0), split(regexreplace(E2, "\D+", " "), " ") ) 添加了这两个数组的产品,计算总蛋白含量。

由于基于正则表达式的文本解析,所有这些都很脆弱,如果字符串偏离预期的格式,它将会中断;例如,如果食谱要求" 1 1/2汤匙糖"。在这种情况下,请参阅第一段。