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

时间:2016-01-25 07:27:05

标签: excel excel-vba excel-2010 excel-2007 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

3 个答案:

答案 0 :(得分:2)

您使用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

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

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

enter image description here

答案 1 :(得分:0)

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

不确定您是否需要宏。您可以将此宏添加到您的文件中。 即使在删除单元格后,再次运行宏时,当前单元格值将是上述单元格的值加1,因此将根据系列进行删除。感谢

答案 2 :(得分:0)

如果您使用以下内容创建唯一 ID 会怎样#

=TEXT(NOW(),"YYYYMMDD-") & TEXT(1,"0000")

20210728-0001 任务 0001 20210728-0002 任务0002 20210728-0003 任务0003

但是现在需要删除 0002 项

唯一 ID # 如何保留在相关任务中

20210728-0001 任务 0001 20210728-0003 任务0003