excel 按分隔符求和 vlookup
excel sum vlookup by delimiter
我正在尝试根据产品名称数组在 Google 电子表格中求和。产品名称(单个产品和组合产品)通过这样的查询水平动态地列出。合并后的 product-headers 用竖线“|”分隔。
=TRANSPOSE(QUERY(Product_Range;"select A where "&SUBSTITUTE(ADDRESS(1;MATCH(B1;Customer_Range;0);4);1;"")&" > 0"))
我可以为带分隔符的产品标题(例如 "Product 1|Add-on 1|Add-on 3")创建静态公式并汇总相关列,但 headers/productnames 的顺序可能会在编辑时发生变化。例如,列标题 "Addon-on 1" 将来可能是 "Product 2"。所以我想把它全部动态化。
https://docs.google.com/spreadsheets/d/1gJAZHLst707rnfcDTDYWwoLneSwhGgezYaCYpLKOtLI/edit?usp=sharing
正在通过以下公式获取单个产品的价格:
=SUM(
(VLOOKUP($A2 ;Products_Range ;MATCH( C; Products_Price_Range ;0);FALSE)) *
(VLOOKUP(C; Factor_Range; MATCH( Customer_Name;Customers_Range ;0);FALSE)) )
我需要某种循环来对嵌套在带分隔符的产品标头中的每个产品项使用此公式。
我在 Google 脚本中创建了一个自定义函数来执行此操作,但由于行数和连接表的数量,性能确实很慢。
所以我希望使用本机公式加快这项工作。
能否请您建议如何将我的 sum-formula 用于每个项目(单个产品列 and/or array-based 产品列)?
我希望这可能吗?
清除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)))
由内而外:从内部分裂开始mmult/match
- 按分隔符拆分 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))))
我正在尝试根据产品名称数组在 Google 电子表格中求和。产品名称(单个产品和组合产品)通过这样的查询水平动态地列出。合并后的 product-headers 用竖线“|”分隔。
=TRANSPOSE(QUERY(Product_Range;"select A where "&SUBSTITUTE(ADDRESS(1;MATCH(B1;Customer_Range;0);4);1;"")&" > 0"))
我可以为带分隔符的产品标题(例如 "Product 1|Add-on 1|Add-on 3")创建静态公式并汇总相关列,但 headers/productnames 的顺序可能会在编辑时发生变化。例如,列标题 "Addon-on 1" 将来可能是 "Product 2"。所以我想把它全部动态化。
https://docs.google.com/spreadsheets/d/1gJAZHLst707rnfcDTDYWwoLneSwhGgezYaCYpLKOtLI/edit?usp=sharing
正在通过以下公式获取单个产品的价格:
=SUM(
(VLOOKUP($A2 ;Products_Range ;MATCH( C; Products_Price_Range ;0);FALSE)) *
(VLOOKUP(C; Factor_Range; MATCH( Customer_Name;Customers_Range ;0);FALSE)) )
我需要某种循环来对嵌套在带分隔符的产品标头中的每个产品项使用此公式。
我在 Google 脚本中创建了一个自定义函数来执行此操作,但由于行数和连接表的数量,性能确实很慢。
所以我希望使用本机公式加快这项工作。
能否请您建议如何将我的 sum-formula 用于每个项目(单个产品列 and/or array-based 产品列)?
我希望这可能吗?
清除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)))
由内而外:从内部分裂开始mmult/match
- 按分隔符拆分 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))))