Google Sheets如何无中间表用纯公式计算订单总金额
无中间表计算订单总金额实现方案
不需要新建中间工作表,直接在订单表「Total」列第一个待计算单元格(即订单号3003对应的总金额单元格)输入下面的数组公式,回车后会自动批量算出所有订单的总金额:
=ARRAYFORMULA(MMULT(--(REGEXEXTRACT(SPLIT(B2:B, ","), "^\S+") = TRANSPOSE('产品价格表'!A2:A)), --'产品价格表'!B2:B))
公式里的引用可按实际表格位置替换:
B2:B是订单表存放line items的列,'产品价格表'!A2:A是价格表的产品名列,'产品价格表'!B2:B是价格表的单价列。
公式逻辑
- 用
SPLIT直接按逗号批量拆分整列所有订单的行项目,不用逐行取数,ARRAYFORMULA会自动适配整列数据 - 用和原有方案一致的正则
^\S+,提取每个拆分结果开头的商品名,自动过滤掉后面- 颜色的后缀部分 - 把提取到的每行商品列表和转置后的产品名录做等值匹配,生成一个「订单×商品」的布尔矩阵,矩阵里值为
TRUE就代表当前订单包含对应商品 - 最后用
MMULT做矩阵乘法,直接把匹配结果和单价表相乘求和,一步算出每个订单的总金额,省掉了单独VLOOKUP、逐行SUM的步骤。
如果觉得MMULT逻辑不好理解,也可以用更贴合原有思路的BYROW版本,同样不需要中间表:
=BYROW(B2:B,LAMBDA(single_order, IF(single_order="","", SUM(VLOOKUP(REGEXEXTRACT(SPLIT(single_order,","),"^\S+"),'产品价格表'!A2:B,2,0)) ) ))
这个公式把原有方案里「拆分-提取商品名-VLOOKUP匹配单价-求和」的流程,用BYROW按行封装在单条公式里,逻辑和原方案完全一致,只是不需要额外占用工作表位置,日常使用足够,仅在数据量特别大的时候计算速度比MMULT版本稍慢。
内容的提问来源于stack exchange,提问作者shenkwen
相关产品推荐
相关产品推荐

