Google Sheets如何用单公式实现逐行统计ID数乘单价求和
Google Sheets 无辅助列单公式实现物品ID加权求和
不需要新增辅助列,直接用SUMPRODUCT函数即可单公式完成全部计算逻辑,适配任意数量的Item列、数据行。
基础用法(计算单个指定ID的结果)
前提假设
- Price列位于A列,有效数据从A2单元格开始向下延伸
- 所有Item列从B列开始横向排列,行范围和Price列完全对齐
- 待查询的目标物品ID存放在指定单元格,例如下方公式中使用
G1作为ID输入单元格
公式
=SUMPRODUCT(A2:A * (B2:Z = G1))
你只需要把公式中
B2:Z替换为你实际的Item列覆盖范围即可,比如Item列一直到AR列,就修改为B2:AR。
运算逻辑(完全匹配需求步骤)
- 逐行计数:
(B2:Z = G1)会遍历Item区域所有单元格,匹配目标ID的单元格返回逻辑值TRUE(运算中等价于数值1),不匹配的返回FALSE(等价于数值0),每行的1累加值就是该行目标ID的出现次数 - 行内加权:逻辑值数组和A列Price值逐元素相乘时,每行的Price会自动乘以该行匹配到ID的单元格数量,直接得到「该行ID出现次数 * 该行Price」的乘积
- 全局求和:
SUMPRODUCT会自动对所有行的乘积结果求和,直接输出最终值
示例验证
用给出的样例数据测试:
- G1填入ID
1时,计算逻辑为50*2 +75*1 =175,公式返回结果一致 - G1填入ID
2时,计算逻辑为50*2 +75*3 =325,公式返回结果一致
进阶用法(一次性批量输出所有ID的计算结果)
如果需要直接得到所有出现过的物品ID的对应加权值,不需要逐个输入ID查询,可以用下面的单公式,输入后会自动溢出全部结果:
=LET( item_range, B2:Z, price_col, A2:A, valid_ids, UNIQUE(TOCOL(item_range, 1)), calc_result, MAP(valid_ids, LAMBDA(t_id, SUMPRODUCT(price_col * (item_range = t_id)))), HSTACK(valid_ids, calc_result) )
公式返回结果为两列:第一列是所有去重后的物品ID,第二列是对应ID的加权求和结果。
方案优势
- 无需任何辅助列,不受Item列数量、数据行数量限制
- 原生支持数组运算,不需要额外嵌套
ARRAYFORMULA,输入后回车即可生效 - 运算效率高于嵌套
COUNTIF的数组方案,大数据量下也能保持流畅 - Item列范围内存在空列、空单元格时不会干扰计算结果,空值会自动判定为不匹配任意ID,不参与求和
内容的提问来源于stack exchange,提问作者w382903
相关产品推荐
相关产品推荐

