Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
利用excel上的VBA代码实现任意数的小数自动顺序编号_Vba_Excel_Excel Formula - Fatal编程技术网

利用excel上的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

我希望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
请参见此处表格的插图:


没有评论,但您应该能够遵循

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!