在excel

时间:2018-06-19 16:22:04

标签: excel vba excel-vba excel-formula

我希望Excel为我添加的每一行自动编号,并使用一个连续的唯一标识符,该标识符取决于我分配给该行的资历级别。 (例如,如果该行是级别2,则任务号应为2.1;如果下一个任务是级别1,则任务号应为3)。最后,我希望它是动态的,因此,如果我要在列表的中间添加一行,则随后的所有任务编号都应该变大。

我在线创建了VBA代码,但没有一个完全符合我的目的。想知道是否有人为此目的。谢谢你的帮助!

Level | Task No. 
  1   | 1
  2   | 1.1
  2   | 1.2
  1   | 2
  2   | 2.1
  2   | 2.2
  1   | 3
  2   | 3.1

请在此处查看表格插图:

enter image description here

1 个答案:

答案 0 :(得分:0)

没有评论,但您应该可以关注...

Sub Label()
    Const MAX_LEVELS As Long = 10
    Dim levels(1 To MAX_LEVELS) As Long, i As Long, x As Long
    Dim c As Range, s
    Set c = ActiveSheet.Range("A1")
    Do While Len(c.Value) > 0
        s = ""
        i = c.Value
        levels(i) = levels(i) + 1
        For x = i + 1 To MAX_LEVELS
            levels(x) = 0
        Next x
        For x = 1 To i
            s = s & IIf(s <> "", ".", "") & levels(x)
        Next x
        With c.Offset(0, 1)
            .NumberFormat = "@"
            .Value = s
        End With
        Set c = c.Offset(1, 0)
    Loop
End Sub

请注意,它不会检查您是否在正确地遵循编号方案(即,如果您直接从1级转到4级,则不会发出警告)