如何在Google Sheets中结合IFNA实现仅非空单元格递增
问题描述
我找到过一个非空单元格递增的解决办法,但不知道怎么让它在用IFNA返回空值的列里生效。
示例表格
| 内容 | 递增数 | 提取值 | 目标递增数 | 提取值 | |||
|---|---|---|---|---|---|---|---|
| 1 | Test ONE and only. | 1 | ONE | 1 | ONE | ||
| 2 | 2 | ||||||
| 2 | Test TWO and only. | 3 | TWO | 3 | TWO | ||
| 4 | 4 | ||||||
| 3 | Test THREE and only. | 5 | THREE | 5 | THREE | ||
| 6 | 6 | ||||||
| 4 | Test FOUR and only. | 7 | FOUR | 7 | FOUR | ||
| 8 | 8 | ||||||
| 9 | 9 | ||||||
| 10 | 10 | ||||||
| 5 | Test FIVE and only. | 11 | FIVE | 11 | FIVE | ||
| 12 | 12 |
当前使用的公式
正常生效的递增公式(A列、D列)
针对B列的递增公式(A1单元格):
=arrayformula( iferror( countifs(row(B1:B), "<=" & row(B1:B), B1:B, "<>") / not(isblank(B1:B)) ) )
针对E列的递增公式(D1单元格):
=arrayformula( iferror( countifs(row(E1:E), "<=" & row(E1:E), E1:E, "<>") / not(isblank(E1:E)) ) )
生成提取值的公式(用IFNA返回空值)
=IFNA(ArrayFormula(REGEXEXTRACT(B1:B,"\b([A-Z]{2,})+(?:\s+[A-Z]+)*\b")),"")
尝试过但无效的方案(G1:H12区域)
G列递增公式
=IFNA(arrayformula( iferror( countifs(row(H1:H), "<=" & row(H1:H), H1:H, "<>") / not(isblank(H1:H)) ) ),"")
H列提取值公式
=IFNA(ArrayFormula(REGEXEXTRACT(E1:E,"\b([A-Z]{2,})+(?:\s+[A-Z]+)*\b")),"")
解决方案
问题核心是isblank()无法识别IFNA返回的空字符串("")——它只对真正的空白单元格返回TRUE,空字符串属于非空白内容。把判断条件改成H1:H=""即可解决:
修改后的G列递增公式:
=ARRAYFORMULA( IF( H1:H="", "", COUNTIFS(ROW(H1:H), "<="&ROW(H1:H), H1:H, "<>") ) )
或者更简洁的版本:
=ARRAYFORMULA( IFERROR( COUNTIFS(ROW(H1:H), "<="&ROW(H1:H), H1:H, "<>") / (H1:H<>"") ) )
原理说明:
- 用
H1:H<>""替代not(isblank(H1:H)),能正确识别IFNA返回的空字符串; - 当H列为空字符串时,
(H1:H<>"")返回FALSE,除以FALSE会触发错误,IFERROR会自动把错误转为空值;或者用IF直接判断,为空时返回空,否则计算递增数。
内容的提问来源于stack exchange,提问作者Lod
相关产品推荐
相关产品推荐

