Excel VBA:自动编号
我正在Excel上创建一个数据库,在尝试为每一行分配自动编号时遇到了一些问题 要求如下:Excel VBA:自动编号,vba,excel,autonumber,Vba,Excel,Autonumber,我正在Excel上创建一个数据库,在尝试为每一行分配自动编号时遇到了一些问题 要求如下: 当B列不为空时,为每行(A列上)生成自动编号 数字应该是唯一的,并且必须始终连接到同一行的内容,即使在对列进行排序或插入新行时也是如此 插入新行(同一列中的任意位置)时,应分配一个新编号(最新编号应为最大编号) 如果 可能的话,自动编号应该有一个前缀,编号应该以四位数字显示(例如0001、0011) 我试过从其他人的问题中找到的一些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
我缺乏VBA的知识,希望有人能帮助我。
非常感谢。不要使用Max()查找下一个号码-而是使用隐藏的工作表或名称来存储当前号码,并在每次需要新Id时递增
例如:
Public Function NextNumber(SequenceName As String)
Dim n As Name, v
On Error Resume Next
Set n = ThisWorkbook.Names(SequenceName)
On Error GoTo 0
If n Is Nothing Then
'create the name if it doesn't exist
ThisWorkbook.Names.Add SequenceName, RefersTo:=2
v = 1
Else
'increment the current value
v = Replace(n.RefersTo, "=", "")
n.RefersTo = v + 1
End If
NextNumber = v
End Function
这允许您使用多个不同的序列,只要为每个序列指定一个不同的名称
Dim seq
seq = NextNumber("seqOne")
'etc
不要使用Max()查找下一个编号-而是使用隐藏的工作表或名称来存储当前编号,并在每次需要新Id时递增该编号
例如:
Public Function NextNumber(SequenceName As String)
Dim n As Name, v
On Error Resume Next
Set n = ThisWorkbook.Names(SequenceName)
On Error GoTo 0
If n Is Nothing Then
'create the name if it doesn't exist
ThisWorkbook.Names.Add SequenceName, RefersTo:=2
v = 1
Else
'increment the current value
v = Replace(n.RefersTo, "=", "")
n.RefersTo = v + 1
End If
NextNumber = v
End Function
这允许您使用多个不同的序列,只要为每个序列指定一个不同的名称
Dim seq
seq = NextNumber("seqOne")
'etc
“我正在用Excel创建数据库”-这是你的错误。Excel不是数据库。不使用Access有什么好的理由吗?(a)请注意,您的要求3与要求1相矛盾-即,当插入新行时,该行上的B列将为空,要求3表示应生成新id,但要求1表示不应生成。(b) 要求4是否意味着单元格的值必须包含前缀,或仅显示前缀-即使用数字格式
“someprefix”0000
是否满足要求?(c)当用户将整个第5行(例如)复制到第10行(例如)的顶部时,其中两行在复制之前都有有效的ID,复制后的第10行应该使用什么id?不要使用Max()查找下一个数字-而是使用隐藏的工作表或名称来存储当前数字,并在每次需要新id时递增它。“我正在Excel中创建数据库”-这是您的错误。Excel不是数据库。不使用Access有什么好的理由吗?(a)请注意,您的要求3与要求1相矛盾-即,当插入新行时,该行上的B列将为空,要求3表示应生成新id,但要求1表示不应生成。(b) 要求4是否意味着单元格的值必须包含前缀,或仅显示前缀-即使用数字格式“someprefix”0000
是否满足要求?(c)当用户将整个第5行(例如)复制到第10行(例如)的顶部时,其中两行在复制之前都有有效的ID,复制后的第10行中应该使用什么id?不要使用Max()查找下一个编号-而是使用隐藏的工作表或名称来存储当前编号,并在每次需要新id时递增。