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ł
相关产品推荐
相关产品推荐

