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

Excel VBA删除行后如何刷新编号?

问题

我在Excel VBA中做了一个可添加信息的工作表,A列是连续编号,B列姓名、C列姓氏,每行对应编号1、2、3... 同时做了用户窗体用来删除指定行,但删除行后编号会出现断号(比如删了第二行后剩下1和3)。我试了一段代码,删除功能正常,但编号刷新无效,求能把编号刷新到最后填充单元格、保持连续顺序的VBA代码。

尝试的代码:

If usunwpis = vbYes Then
    Selection.Delete
    LastRow = Cells(Rows.Count, "F").End(xlUp).Row
    Range("F24:F" & LastRow) = Evaluate("IF(ROW(F24:F" & LastRow - 2 & "),ROW(F24:F" & LastRow - 2 & "))")
    MsgBox "Deleted rows"
    Unload Me
End If
解决方案

你原代码的Evaluate公式逻辑错误,行号计算不匹配,导致编号刷新失效。以下是修正后的代码,分两种场景适配:

场景1:编号列是A列(对应你描述的表头设置)

If usunwpis = vbYes Then
    ' 删除选中行
    Selection.Delete
    
    ' 获取A列最后一行数据(假设第1行是表头,编号从第2行开始)
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    ' 遍历生成连续编号
    Dim i As Long
    For i = 2 To lastRow
        Cells(i, "A").Value = i - 1 ' 第2行对应编号1,依次递增
    Next i
    
    MsgBox "已删除行,编号已重新整理"
    Unload Me
End If

场景2:编号列是F列(对应你尝试的代码逻辑)

If usunwpis = vbYes Then
    Selection.Delete
    
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "F").End(xlUp).Row
    
    ' 从F24开始生成连续编号(匹配你代码的起始行)
    Dim i As Long
    For i = 24 To lastRow
        Cells(i, "F").Value = i - 23 ' F24对应编号1,F25对应2,以此类推
    Next i
    
    MsgBox "Deleted rows"
    Unload Me
End If

原代码问题说明

  • Evaluate中的行号范围计算错误,LastRow - 2会导致编号起始和数量不匹配;
  • 循环方式更直观可控,能确保每一行的编号严格连续,避免公式计算的边界错误。

内容的提问来源于stack exchange,提问作者Mateusz Szczygieł

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:30:55