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),"")),返回空字符串""
- 输入公式查找第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] || ""; }
使用说明:
- 打开目标Google Sheets表格,点击「扩展程序」→「Apps Script」
- 将上述代码粘贴到脚本编辑器中,保存项目
- 返回表格,在单元格中输入
=NTH_NZPOS(A1:G1, 2)即可调用,其中A1:G1是目标区域,2是要查找的序号
内容的提问来源于stack exchange,提问作者aboyd
相关产品推荐
相关产品推荐

