Google Sheets添加ARRAYFORMULA后原公式失效的修复求助
问题分析与修复方案
原公式的核心需求是:逐行计算当前行上方区域中,满足C="DK"且B等于当前行B值的D列唯一值数量,减去满足C="H"且B等于当前行B值的D列唯一值数量。
直接给COUNTUNIQUE+QUERY套ARRAYFORMULA会失效,原因是:
ROW()在ARRAYFORMULA中会返回整个范围的行号数组,OFFSET无法生成对应每行的动态范围COUNTUNIQUE是聚合函数,不会自动逐行计算,只会返回单一结果QUERY无法解析数组化的条件参数
修复后的公式(推荐用BYROW+COUNTUNIQUEIFS,更简洁高效)
=BYROW(B2:B, LAMBDA(x, IF(x="",, COUNTUNIQUEIFS(D$2:D, C$2:C, "DK", B$2:B, x, ROW(D$2:D), "<"&ROW(x)) - COUNTUNIQUEIFS(D$2:D, C$2:C, "H", B$2:B, x, ROW(D$2:D), "<"&ROW(x)) ) ))
公式说明
BYROW(B2:B, LAMBDA(x, ...)):遍历B2:B的每个单元格x,对每行单独执行计算IF(x="",, ...):跳过B列的空单元格,避免无效计算COUNTUNIQUEIFS:直接按多条件统计唯一值,其中ROW(D$2:D), "<"&ROW(x)确保只统计当前行上方的内容- 两个
COUNTUNIQUEIFS分别对应原公式中DK和H的条件,最后做减法得到结果
兼容原QUERY逻辑的版本
如果你更习惯用QUERY,可以用BYROW包裹原逻辑,确保每行使用对应的动态范围:
=BYROW(B2:B, LAMBDA(x, IF(x="",, COUNTUNIQUE(IFERROR(QUERY(OFFSET(A$2,0,0,ROW(x)-2,4), "Select D where C='DK' and B='"&x&"'", 0), "")) - COUNTUNIQUE(IFERROR(QUERY(OFFSET(A$2,0,0,ROW(x)-2,4), "Select D where C='H' and B='"&x&"'", 0), "")) ) ))
内容的提问来源于stack exchange,提问作者Tuấn Nguyễn Thanh
相关产品推荐
相关产品推荐

