Excel VBA:自动生成每行的唯一编号

我有一个自动填充行的唯一编号从某个值(例如1000)开始的要求。

  • 该表有2列。

  • 当我在每行的第二列中填入一个值时,第一列应该自动填充。

  • 我填了3排(1000,1001,1002)。

  • 现在,如果我删除具有自动生成值为1001的中间行,最初与值1002的行将自动更新为1001。

  • 但根据我的要求,价值应该保持独特(应该保持为1002)。

我使用的公式是:

=IF(B2<>"",COUNTA($B$2:B2)+999,"") 

删除值之前,我的excel是这样的:

 Test_Case_Id Name 1000 a 1001 b 1002 c 

删除中间行后变成:

 Test_Case_Id Name 1000 a 1001 c 

预期结果:

 Test_Case_Id Name 1000 a 1002 c 

请帮助我。

谢谢,Vevek

您使用VBA标记,但您没有使用VBA。 计数行或使用当前行号的公式会在工作表重新计算时始终更新。

为了实现你所描述的,你真的需要VBA。 一个简单的工作表更改事件应该这样做。 想想看

 Private Sub Worksheet_Change(ByVal Target As Range) Dim maxNumber If Not Intersect(Target, Range("B:B")) Is Nothing Then ' don't run when more than one row is changed If Target.Rows.Count > 1 Then Exit Sub ' if column A in the current row has a value, don't run If Cells(Target.Row, 1) > 0 Then Exit Sub ' get the highest number in column A, then add 1 and write to the ' current row, column A maxNumber = Application.WorksheetFunction.Max(Range("A:A")) Target.Offset(0, -1) = maxNumber + 1 End If End Sub 

复制代码,右键单击工作表选项卡,select“查看代码”并粘贴到代码窗口中。

以下是删除ID为1002的行之前和之后的屏幕截图:

在这里输入图像说明

 Sub abc() Dim a As Integer Dim b As Integer Dim i As Integer Dim z As Integer i = 1 Set sh = ThisWorkbook.Sheets("Sheet1") 'instead of sheet1 you can add name of your sheet Dim k As Long k = 2 Set rn = sh.UsedRange k = rn.Rows.Count Cells(1, 1).Value = 1001 Do Until i = k b = (Cells(i, 1).Value) a = b + 1 i = i + 1 Cells(i, 1).Value = a Loop End Sub 

不知道你是否需要一个macros。 您可以将此macros添加到您的文件。 即使删除单元格后,一旦再次运行macros,当前单元格的值将是上面的单元格的值加1,所以按照系列进行换算。 谢谢