使用Arrayformula实现插入新行时自动维护累计余额
用ARRAYFORMULA实现自动累计余额(插入新行无需手动复制)
直接在余额列的起始计算单元格(比如D4)输入以下数组公式,替换原来的手动复制公式:
=ARRAYFORMULA( IF(ROW(A4:A)=ROW(A4), $D$3, IF(ROW(A4:A)>ROW(A4), SCAN($D$3, A4:A, LAMBDA(acc, amt, IF(ISBLANK(amt), "", IF(OFFSET(B4:B, ROW(A4:A)-ROW(A4), 0)=$D$1, acc+amt, IF(OFFSET(C4:C, ROW(A4:A)-ROW(A4), 0)=$D$1, acc-amt, acc) ) ) ) ), "" ) ) )
公式逻辑说明
ARRAYFORMULA让公式自动覆盖整列范围,无需逐行复制SCAN函数负责逐行迭代累计余额,初始值为你设置的期初余额$D$3LAMBDA定义核心计算规则:- 若当前行
Amount列(A列)为空,返回空值避免无效填充 - 检查
Dr列(B列)是否为选中账户($D$1),是则余额累加金额 - 若
Dr列不匹配,检查Cr列(C列)是否为选中账户,是则余额减去金额 - 都不匹配则保持上一行余额不变
- 若当前行
- 开头的
IF判断确保第一行计算直接衔接期初余额,后续行自动迭代
自定义调整指南
- 若期初余额位置变更:把公式中所有
$D$3替换为对应单元格引用(比如$E$2) - 若账户下拉列表位置变更:把
$D$1替换为对应单元格引用(比如$B$1) - 若金额/Dr/Cr列位置调整:修改
A4:A、B4:B、C4:C为对应列的范围
注意事项
- 输入公式前,请清空余额列(D4及以下)原有公式,避免冲突
- 插入新行后,只要在A列输入金额、B/C列选择账户,余额会自动计算
- 如果你用的是Excel 365,公式逻辑完全通用(Excel支持
SCAN和动态数组,无需额外操作)
内容的提问来源于stack exchange,提问作者tedioustortoise
相关产品推荐
相关产品推荐

