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

Google Sheets获取指定行第N个非零值相对位置的问题

解决Google Sheets获取第N个非零值相对位置的问题

优先方案:使用Google Sheets内置函数

直接在单元格中使用以下内置函数公式即可实现需求,无需编写脚本:

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

使用说明:

  • 将公式中的range替换为目标单行/单列区域,nth替换为要查找的第N个非零值的序号
  • 示例:
    • 输入公式查找第1个非零值位置:=LET(s,TOCOL({0,0,5,0,0,8,0}),IFERROR(INDEX(REDUCE(,SEQUENCE(ROWS(s)),LAMBDA(a,i,IF(NE(INDEX(s,i,1),0),IF(ISBLANK(a),{i},{a;i}),a))),1,1),"")),返回3
    • 输入公式查找第2个非零值位置:=LET(s,TOCOL({0,0,5,0,0,8,0}),IFERROR(INDEX(REDUCE(,SEQUENCE(ROWS(s)),LAMBDA(a,i,IF(NE(INDEX(s,i,1),0),IF(ISBLANK(a),{i},{a;i}),a))),2,1),"")),返回6
    • 输入公式查找第3个非零值位置:=LET(s,TOCOL({0,0,5,0,0,8,0}),IFERROR(INDEX(REDUCE(,SEQUENCE(ROWS(s)),LAMBDA(a,i,IF(NE(INDEX(s,i,1),0),IF(ISBLANK(a),{i},{a;i}),a))),3,1),"")),返回空字符串""

自定义函数修正方案(Apps Script)

你之前的代码错误在于直接将Google Sheets内置函数语法复制到JavaScript中,两者语法不兼容。以下是修正后的Apps Script函数:

function NTH_NZPOS(range, nth) {
  // 将二维区域数组转为一维数组
  const flatRange = range.flat();
  // 筛选出所有非零值的位置(Google Sheets单元格索引从1开始)
  const nonZeroPositions = flatRange
    .map((value, index) => value !== 0 ? index + 1 : null)
    .filter(pos => pos !== null);
  // 返回第nth个位置,不存在则返回空字符串
  return nonZeroPositions[nth - 1] || "";
}

使用说明:

  1. 打开目标Google Sheets表格,点击「扩展程序」→「Apps Script」
  2. 将上述代码粘贴到脚本编辑器中,保存项目
  3. 返回表格,在单元格中输入=NTH_NZPOS(A1:G1, 2)即可调用,其中A1:G1是目标区域,2是要查找的序号

内容的提问来源于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:33:27