Excel 基于数据层级位置的连续编号顺序
Excel Sequential Numbering order based on hierarchy position of data
我需要根据 excel 中数据的列表位置在 excel 中添加连续编号顺序。我已经尝试了很多方法来解决这个问题,但肯定有一个简单的解决方案。
如您所见,我的数据是一个有序的文本列表,您可以在其中看到数据在各行中的偏移量中的层次结构。我正在尝试根据左侧的数据自动创建黄色图片。
我想到的唯一解决方案是在每列前面添加列,根据非空白过滤记录,然后从左到右手动添加序列,但即使这样也太费时了。
接下来我将研究宏,但认为使用公式可能有更简单的解决方案。 - 如果找到会更新。
这可能不是最有效的解决方案,但它有效:
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 区域。
结果:
公式:(蓝色为常量,橙色为第一层级,绿色为拖入框)
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
我需要根据 excel 中数据的列表位置在 excel 中添加连续编号顺序。我已经尝试了很多方法来解决这个问题,但肯定有一个简单的解决方案。
如您所见,我的数据是一个有序的文本列表,您可以在其中看到数据在各行中的偏移量中的层次结构。我正在尝试根据左侧的数据自动创建黄色图片。
我想到的唯一解决方案是在每列前面添加列,根据非空白过滤记录,然后从左到右手动添加序列,但即使这样也太费时了。
接下来我将研究宏,但认为使用公式可能有更简单的解决方案。 - 如果找到会更新。
这可能不是最有效的解决方案,但它有效:
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 区域。
结果:
公式:(蓝色为常量,橙色为第一层级,绿色为拖入框)
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