You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Sheets中用数组公式计算动态行的费用分摊总额

解决方案

单个人员单元格的分摊总额公式

在对应人员的总额单元格(比如Person A对应的C5),使用以下公式即可计算该人员的总分摊费用:

=SUM(ARRAYFORMULA(IF(C2:C4="X", B2:B4/BYROW(C2:F4, LAMBDA(row, COUNTIF(row, "X"))), 0)))

公式拆解:

  • BYROW(C2:F4, LAMBDA(row, COUNTIF(row, "X"))):遍历每一行发票数据,计算该行中标记"X"的人数(即需要分摊该项目的人数),生成每行对应分摊人数的数组。
  • B2:B4/[上述数组]:计算单个项目里,每人需要分摊的金额(项目总费用 ÷ 该行分摊人数)。
  • IF(C2:C4="X", ..., 0):判断当前人员列(这里是C列)在该行是否标记了"X",是则取对应分摊金额,否则取0。
  • SUM(ARRAYFORMULA(...)):把所有符合条件的分摊金额求和,得到该人员的总费用。

批量生成所有人员的分摊总额

如果想一次性在总额行(比如第5行)生成所有人员的分摊金额,在C5单元格输入以下公式,结果会自动填充到右侧所有人员列:

=ARRAYFORMULA(TRANSPOSE(MMULT(N(C2:F4="X"), B2:B4/BYROW(C2:F4, LAMBDA(row, COUNTIF(row, "X"))))))

公式拆解:

  • N(C2:F4="X"):将人员列的"X"转为1、非"X"转为0,生成一个标记矩阵,记录每个人员是否参与对应项目的分摊。
  • MMULT(...):通过矩阵乘法,将标记矩阵与每行的单人分摊金额数组相乘,直接算出每个人员的总分摊额。
  • TRANSPOSE(...):把矩阵乘法的结果转置,使其对应到各人员列的位置。
  • ARRAYFORMULA:让公式批量应用到所有人员列。

动态适配新增数据行(可选)

如果发票数据会新增行,可将公式中的固定范围改为动态范围,结合IFERROR处理空行:
单个单元格动态版:

=SUM(ARRAYFORMULA(IF(C2:C="X", B2:B/BYROW(C2:F, LAMBDA(row, COUNTIF(row, "X"))), 0)))

批量动态版:

=ARRAYFORMULA(IFERROR(TRANSPOSE(MMULT(N(C2:F="X"), B2:B/BYROW(C2:F, LAMBDA(row, COUNTIF(row, "X"))))), ""))

内容的提问来源于stack exchange,提问作者wcarhart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:43:17