【发布时间】:2017-10-31 14:58:45
【问题描述】:
我正在 Excel 上创建一个数据库,但在尝试为每一行分配自动编号时遇到了一些问题。
要求是:
- 当 B 列不为空时,为每一行(在 A 列上)生成自动编号。
- 编号应该是唯一的,并且必须始终连接到同一行的内容,即使在对列进行排序或插入新行等时也是如此。
- 插入新行时(同一列的任意位置),应分配新编号(最新编号应为最大编号) 如果
- 可以,汽车号码应该有前缀,并且号码应该显示为四位数字(例如0001、0011)
我尝试了一些从其他人的问题中找到的 VBA 代码(例如 Excel VBA : Auto Generating Unique Number for each row)。
到目前为止,下面的代码效果最好,但该代码无法解决要求 (3) 和 (4)。
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知识,希望有人可以帮助我。 非常感谢。
【问题讨论】:
-
“我在 Excel 中创建一个数据库”——这是你的错误。 Excel 不是数据库。
-
有什么理由不使用 Access 吗?
-
(a) 请注意,您的要求 3 与您的要求 1 相矛盾 - 即,当插入新行时,该行上的 B 列将为空白,要求 3 表示应该生成一个新 ID,但要求 1说不应该。 (b) 要求 4 是否意味着单元格的值必须包含前缀,或者只是显示前缀 - 即使用数字格式
"someprefix"0000是否满足要求? -
(c) 当用户将整个第 5 行(例如)复制到第 10 行的顶部(例如)时,两行在复制之前都有有效的 id,应该使用什么 id复制后的第 10 行?
-
不要不使用 Max() 来查找下一个数字 - 使用隐藏的工作表或名称来存储当前数字,并在每次需要新 ID 时递增.
标签: vba excel autonumber