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

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),
  "")
)

修复说明

  1. 将reduce的初始值改为make_array(0,1),生成一个空的纵向数组,确保后续所有堆叠操作都保持一维纵向结构。
  2. 用vstack(a,i)替代原有的if(isblank(a),{i},{a;i}),统一纵向添加元素的逻辑,避免维度混乱。
  3. 保留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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:52:43