Excel M365中非循环实现多维动态数组按条件部分求和
Excel M365 多维动态数组指定列求和方案
假设你的动态数组(DataTable)第一行为类别标题,下方为数据行,以下两种非循环方案可实现仅对类别A、B对应列求和,同时保留原行结构:
方案一:BYROW + 索引匹配求和
逻辑直观,遍历每一行提取目标列并求和:
=BYROW(DataTable, LAMBDA(row, SUM(INDEX(row, , ISNUMBER(MATCH(INDEX(DataTable,1, ), {"A","B"}, 0))))))
拆解逻辑:
INDEX(DataTable,1, )提取第一行的全部类别标题MATCH(..., {"A","B"}, 0)定位类别A、B所在的列位置,非目标类别返回错误值ISNUMBER(...)将匹配结果转为布尔数组(TRUE对应目标列)INDEX(row, , ...)从当前行中筛选出目标列的数据SUM(...)对筛选出的列数据求和BYROW遍历动态数组的每一行,重复上述求和操作
方案二:MMULT矩阵乘法求和
适合数据量较大的场景,计算效率更高:
=MMULT(DataTable, TRANSPOSE(--(INDEX(DataTable,1, )={"A","B"})))
拆解逻辑:
--(INDEX(DataTable,1, )={"A","B"})生成权重数组:目标类别A、B对应位置为1,其余为0TRANSPOSE(...)将权重数组转置为列向量,满足矩阵乘法的维度要求MMULT通过矩阵乘法实现每行数据与权重数组的加权求和,本质就是对A、B列数据求和
注意事项
- 若你的DataTable是动态生成的(比如
FILTER、UNIQUE返回的数组),直接替换公式中的DataTable即可 - 若类别标题不在第一行,调整
INDEX(DataTable,1, )中的行号为实际标题行号
内容的提问来源于stack exchange,提问作者Blendr
相关产品推荐
相关产品推荐

