用SUBTOTAL(3,$B$2:B2)可生成筛选后连续序号,A2输入后双击填充柄自动扩展;增删行用SUBTOTAL(103,INDIRECT("B"&ROW()))并F9重算;容错需求高时用Z列辅助=SUBTOTAL(102,B2)再SUM累计。

Excel筛选后序号变成1、3、5、8、11这种跳号状态,根本没法直接用,每次筛选完都得手动重填一遍,浪费时间还容易出错。
用SUBTOTAL(3,范围)生成实时可见行序号
这是最常用也最稳妥的方法,适用于B列有数据(哪怕只是文字或符号)且首行为B2的常规表格结构。
在序号列第一个数据单元格(例如A2)输入公式:=SUBTOTAL(3,$B$2:B2)。
按Enter确认,A2会立即显示“1”——因为此时只有B2一个可见且非空单元格被统计进来。
将鼠标移至A2右下角填充柄处,双击,Excel自动向下填充至当前数据区最后一行;这个动作比拖拽更精准,不会多填或漏填。
启用筛选(数据 → 筛选),任意筛选后观察A列:所有隐藏行对应的序号自动变为空白或0,而可见行严格从1开始连续编号,无跳号、无重复、不依赖B列是否为数值。
用SUBTOTAL(103,INDIRECT)避免插入/删除行导致引用偏移
当你经常增删中间行,又不想每次重填序号公式时,这个方法能锁死每行对自身数据列的判断,不受行位置变动影响。
方法一:在A2输入公式=SUBTOTAL(103,INDIRECT("B"&ROW())),回车。
选中A2,Ctrl+C复制;再选中A3:A1000(覆盖你可能用到的最大行数),Ctrl+V粘贴。
粘贴完成后,任意点击一个已粘贴公式的单元格(如A5),按F9强制重算一次——这一步不能省,否则部分序号可能仍显示旧值。
注意:INDIRECT会让公式变为易失性计算,大量使用时可能略微拖慢表格响应速度,但对几千行以内的日常报表完全无感。
用辅助列+SUM累计实现强容错序号
当B列存在空单元格、混合类型(数字+文本+空白)或你希望序号逻辑彻底脱离B列内容时,此法最可靠。
第一步:在空白列(如Z列)Z2输入公式=SUBTOTAL(102,B2),回车;该公式仅对B2是否为可见的数值单元格返回1或0。
第二步:将Z2公式向下填充整列(双击Z2右下角填充柄即可)。
第三步:在A2输入公式=SUM(Z$2:Z2),回车后同样双击A2填充柄向下填充。
第四步:右键Z列列标 → 隐藏,只留A列作为最终序号列显示。
此时哪怕B列某行是空、是文字、是错误值,只要它被筛选出来且Z列对应值为1,A列就会正确累加;取消筛选后也能还原原始顺序下的连续自然数序列。


















