excel sum vlookup by delimiter

时间:2018-02-19 20:57:19

标签: for-loop excel-formula google-sheets sum vlookup

我试图根据产品名称数组在Google电子表格中进行总结。产品名称(单个产品和组合产品)通过类似的查询水平和动态列出。组合的产品标题用管道" |"。

分隔
=TRANSPOSE(QUERY(Product_Range;"select A where "&SUBSTITUTE(ADDRESS(1;MATCH(B1;Customer_Range;0);4);1;"")&" > 0"))

我可以为分隔的产品标题制作一个静态公式(例如"产品1 |附加组件1 |附加组件3")并总结相关列,但标题/产品名称的顺序可以改变编辑。例如,列标题" Addon-on 1"可能是"产品2"在将来。所以我想动态地完成它。

https://docs.google.com/spreadsheets/d/1gJAZHLst707rnfcDTDYWwoLneSwhGgezYaCYpLKOtLI/edit?usp=sharing

这个公式正在提取单品的价格:

=SUM(
(VLOOKUP($A2 ;Products_Range ;MATCH( C$4; Products_Price_Range  ;0);FALSE)) * 
(VLOOKUP(C$4; Factor_Range; MATCH( Customer_Name;Customers_Range  ;0);FALSE)) )

我需要某种循环来为嵌套在分隔的productheader中的每个productitem使用此公式。

我已经在Google Script中设置了自定义功能,但由于行数和连接的数量,性能非常慢。

所以我希望用原生公式快速完成这项工作。

请问您如何使用我的sum-formula(每个产品列和/或基于数组的产品列)?

我希望这可能吗?

1 个答案:

答案 0 :(得分:0)

明确B3:B1950

B3:

=ARRAYFORMULA(VLOOKUP(B2;Factor!A:E;MATCH(A1;Factor!1:1;0);0)*MMULT(VLOOKUP(A3:A1949;Prices!A:E;(MATCH(SPLIT(B2;"|");Prices!1:1;0));0);(ROW(A1:index(A:A;counta(SPLIT(B2;"|"))))^0)))

从内到外:从分裂内部开始/匹配

  • 通过分隔符拆分B2并创建匹配的索引
  • 将所有不同的索引提供给vlookup,查找所有格式
  • 矩阵将它们与垂直1s数组相乘(大小=组合实体中组合的不同产品的数量) //这不是必需的,如果您只查找1个结果而不是数组。
  • 查找因子乘以Vlookup / Match
  • 将所有mmult输出数组乘以因子得到最终结果。

编辑:

=ARRAYFORMULA(MMULT(VLOOKUP(A3:A1949;Prices!A:E;(MATCH(SPLIT(B2;"|");Prices!1:1;0));0);transpose(VLOOKUP(Split(B2;"|");Factor!A:C;MATCH(A1;Factor!1:1;0);0))))