利用excel上的VBA代码实现任意数的小数自动顺序编号
我希望Excel自动为我添加的每一行编号,并使用一个顺序唯一标识符,该标识符取决于我分配给该行的资历级别。(例如,如果行是级别2,则任务编号应为2.1;如果下一个任务是级别1,则任务编号应为3)。最后,我希望它是动态的,所以如果我在列表中间添加一行,所有后续的任务号应该变得更大。 我在网上发现了一些VBA代码,但没有一个完全符合我的目的。我想知道是否有人有这样的东西。谢谢你的帮助利用excel上的VBA代码实现任意数的小数自动顺序编号,vba,excel,excel-formula,Vba,Excel,Excel Formula,我希望Excel自动为我添加的每一行编号,并使用一个顺序唯一标识符,该标识符取决于我分配给该行的资历级别。(例如,如果行是级别2,则任务编号应为2.1;如果下一个任务是级别1,则任务编号应为3)。最后,我希望它是动态的,所以如果我在列表中间添加一行,所有后续的任务号应该变得更大。 我在网上发现了一些VBA代码,但没有一个完全符合我的目的。我想知道是否有人有这样的东西。谢谢你的帮助 Level | Task No. 1 | 1 2 | 1.1 2 | 1.2 1
Level | Task No.
1 | 1
2 | 1.1
2 | 1.2
1 | 2
2 | 2.1
2 | 2.2
1 | 3
2 | 3.1
请参见此处表格的插图:
没有评论,但您应该能够遵循
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
子标签()
Const MAX_LEVELS,长度=10
变暗级别(1到最大_级别)为长,i为长,x为长
尺寸c作为范围,s
设置c=ActiveSheet.Range(“A1”)
当Len(c.值)>0时执行
s=“”
i=c.值
级别(i)=级别(i)+1
对于x=i+1至最大_水平
级别(x)=0
下一个x
对于x=1到i
s=s&IIf(s“,”)和标高(x)
下一个x
带c.Offset(0,1)
.NumberFormat=“@”
.Value=s
以
设置c=c.偏移量(1,0)
环
端接头
注意,它不会检查您是否正确遵循编号方案(即,如果您直接从1级转到4级,它不会警告您)2.2和3.1.2之间的区别是什么?您的代码是什么样的,你在哪一部分被难住了?为什么最后一部分是3.1.2而不是3.1.1?第一列是硬编码的,用来表示老年人的水平。把2想象成“苹果”,把2.2想象成“苹果被咬”,把2.2.1想象成“张开嘴咬苹果”。3.1.2在这种情况下,将是另一个高级任务(在本例中,它类似于“用水清洗梨”),最后一个任务也应该是3.1.1,而不是3.1.2-好的呼叫Tim!