Google Sheets用ARRAYFORMULA+SUMIFS处理日期不生效问题求助
Google Sheets ARRAYFORMULA 逾期余额计算解决方案
方案1:QUERY预聚合+VLOOKUP(大数据量优先推荐)
该方案仅执行1次聚合计算,批量匹配结果,性能远高于逐行计算,适合十万行以上的数据集:
公式直接粘贴到O1单元格即可自动扩展整列
={"overdue"; ARRAYFORMULA(IF(LEN(A2:A), IFERROR(VLOOKUP(A2:A, QUERY(R:V,"SELECT R, SUM(V) WHERE Q < date '"&TEXT(TODAY(),"yyyy-mm-dd")&"' GROUP BY R"), 2, 0), 0) - M2:M, ))}
- 逻辑说明:
- 先用
QUERY函数按客户维度(R列)一次性统计所有付款日期(Q列)早于今日的应付总额 - 用
VLOOKUP批量匹配每行客户对应的逾期总额 - 减去当前行的已付金额(M列)得到当前行的逾期余额
- 外层
IF(LEN(A2:A))控制仅A列有值的行返回结果,空白行不计算
- 先用
方案2:BYROW+SUMIFS(多复杂条件场景适用)
如果需要多维度自定义判断条件,可使用LAMBDA类逐行计算函数,原生支持数组扩展:
公式直接粘贴到O1单元格即可自动扩展整列
={"overdue"; BYROW(A2:A, LAMBDA(curr_cus, IF(curr_cus="",, SUMIFS(V:V, R:R, curr_cus, Q:Q, "<"&TODAY()) - INDEX(M:M, ROW(curr_cus)) ) ))}
原公式失效原因
SUMIF/SUMIFS本身为全局聚合函数,单独嵌套ARRAYFORMULA时仅返回单值聚合结果,不会逐行触发计算;你采用的拼接条件写法存在维度不匹配问题,条件范围与判断条件的行无法一一对应,因此无法得到正确的逐行结果。
内容的提问来源于stack exchange,提问作者Union Movil
相关产品推荐
相关产品推荐

