Excel基于数据层次结构位置的顺序编号顺序

时间:2015-02-19 13:23:49

标签: excel excel-vba excel-formula vba

我需要根据excel中数据的列表位置在excel中添加顺序编号顺序。我已经尝试了许多方法来做到这一点,但肯定必须有一个简单的解决方案。

enter image description here

正如您所看到的,我的数据是一个有序的文本列表,您可以在其中查看行中数据偏移的层次结构。我试图根据左侧的数据自动创建黄色图片。

我提出的唯一解决方案是在每列前面添加列,根据非空白过滤记录,然后从左到右手动添加序列,但即使这样也太耗时。

我接下来会研究一个宏,但认为使用公式可能会有更简单的解决方案。 - 如果找到则会更新。

3 个答案:

答案 0 :(得分:1)

这可能不是最有效的解决方案,但它有效: enter image description here

G2中的公式(用它填充其余区域):

=IF(ISBLANK(A2),IF(ISBLANK(B2),G1,G1+1),0)

L2中的公式(用它填充其余区域):

=IF(G2>0,K2&"."&G2,"")

Q2中的公式(用它填充其余区域):

=IF(ISBLANK(B2),"",MID(L2,2,LEN(L2))&" - "&B2)

您可以通过增加区域大小轻松地将其用于任何深度,但是您需要在每个区域的左侧显示空顶行和空列以使其正常工作。

你可以通过组合最后两个公式来跳过L:O区域。

答案 1 :(得分:1)

<强>结果: enter image description here

公式:(蓝色是常量,橙色表示第一个层次结构,绿色表示在框中拖动) enter image description here

答案 2 :(得分:1)

Sub Sequential_Numbering()
    Dim tmpRange As Range, tmpArray(1 To 4) As Integer, x As Integer

    Set tmpRange = Range("A1")
    tmpArray(1) = 1
    tmpRange.Value = tmpArray(1) & " - " & tmpRange.Value

    For x = 2 To 13
        Set tmpRange = Rows(x).Find(What:="*")
        Select Case tmpRange.Column
            Case 1
                tmpArray(1) = tmpArray(1) + 1
                tmpArray(2) = 0
                tmpArray(3) = 0
                tmpArray(4) = 0
                tmpRange.Value = tmpArray(1) & " - " & tmpRange.Value
            Case 2
                tmpArray(2) = tmpArray(2) + 1
                tmpArray(3) = 0
                tmpArray(4) = 0
                tmpRange.Value = tmpArray(1) & "." & tmpArray(2) & " - " & tmpRange.Value
            Case 3
                tmpArray(3) = tmpArray(3) + 1
                tmpArray(4) = 0
                tmpRange.Value = tmpArray(1) & "." & tmpArray(2) & "." & tmpArray(3) & " - " & tmpRange.Value
            Case 4
                tmpArray(4) = tmpArray(4) + 1
                tmpRange.Value = tmpArray(1) & "." & tmpArray(2) & "." & tmpArray(3) & "." & tmpArray(4) & " - " & tmpRange.Value
        End Select
    Next x
End Sub