Google Sheets自定义函数NTH_NZPOS在n>2时无法返回第n个非零值位置
修复Google Sheets自定义函数NTH_NZPOS的n≥3返回空问题
问题根源在于reduce函数的数组维度处理错误:初始值为空时,第一次生成的是横向数组({i}),后续用{a;i}纵向堆叠会导致数组变为二维结构,index无法正确索引第3个及以后的元素。
修复后的函数代码
=NTH_NZPOS(range,nth) =let(s,tocol(range), iferror( index( reduce(make_array(0,1),sequence(rows(s)), lambda(a,i,if(ne(index(s,i,1),0),vstack(a,i),a))), nth,1), "") )
修复说明
- 将reduce的初始值改为
make_array(0,1),生成一个空的纵向数组,确保后续所有堆叠操作都保持一维纵向结构。 - 用
vstack(a,i)替代原有的if(isblank(a),{i},{a;i}),统一纵向添加元素的逻辑,避免维度混乱。 - 保留
tocol(range)将输入的单行数据转为纵向列,确保遍历逻辑正确。
替代简化写法
如果不想用vstack,也可以修改第一次生成的数组为纵向格式:
=NTH_NZPOS(range,nth) =let(s,tocol(range), iferror( index( reduce(,sequence(rows(s)), lambda(a,i,if(ne(index(s,i,1),0),if(isblank(a),{i;},{a;i}),a))), nth,1), "") )
这里把{i}改为{i;},强制第一次生成纵向数组,后续堆叠时保持结构一致。
内容的提问来源于stack exchange,提问作者aboyd
相关产品推荐
相关产品推荐

