如何在Excel中對列表式數字進行排序?

如何在Excel中對列表式數字進行排序?

我在 Excel 中有一個「數字」列,我想按如下方式排序:

1.1
1.2
1.2.1
1.2.6
1.2.9
1.2.10
1.2.11
1.3

但是,無論單元格的類型是數字還是文本,Excel 都會按如下方式對它們進行排序:

1.1
1.2
1.2.1
1.2.10
1.2.11
1.2.6
1.2.9
1.3

這也可以稱為「自然排序」——在像 PHP 這樣的程式語言中,這可以透過natsort 功能。但我似乎找不到在 Excel 中以這種方式排序的方法。

為了幫助進一步提供一些上下文:這些數字代表部分和子部分——不是小數,而是列表項目:

1. Section
    1. Sub-section
    2. Sub-section
        1.  Item
        6.  Item
        9.  Item
        10. Item
        11. Item
    3. Sub-section

答案1

您可以製作一個表格來分割值:

對於每一列,使用標題(第 1 行)和公式(第 2 行以上):

A1: text    A2: (your section numbers)
B1: dot1    B2: =FIND(".",A2,1)  
C1: dot2    C2: =IFERROR(FIND(".",A2,B2+1),LEN(A2)+1)  
D1: num1    D2: =VALUE(MID(A2,1,B2-1))  
E1: num2    E2: =IFERROR(VALUE(MID(A2,B2+1,C2-B2-1)),0)  
F1: num3    F2: =IFERROR(VALUE(MID(A2,C2+1,LEN(A2)-C2)),0)  

這顯示為:

      A      B      C      D      E      F

1   text   dot1   dot2   num1   num2   num3
2   1.1       2      4      1      1      0
3   1.1.3     2      4      1      1      3
4   2.10.7    2      5      2     10      7

然後您可以按列 num1、num2 和 num3 進行自訂排序。

答案2

透過插入使用者定義函數,我取得了良好的結果。 UDF 傳回一個值,表示以百萬為單位的節數、以千為單位的小節數、以單位為單位的項目數、以千分之一為單位的子項目(如果有)、以百萬分之一為單位的子子項目等。例如,

1.2.3會返回1,002,003,同時

1.51.5.5返回1,051,005.005- 然後這些數字可以用於排序。

我發現這比使用工作表內字串函數或對多列進行排序更方便。

UDF如下:

Function LList(stInVal As String) As Double

Dim iPower          As Integer
Dim vSplit          As Variant
Dim i               As Long

iPower = 6

vSplit = Split(stInVal, ".", -1)

For i = 0 To UBound(vSplit)
    LList = LList + CInt(vSplit(i)) * 10 ^ (iPower - 3 * i)
Next i

End Function

答案3

道格詳細解釋了這一點。我希望這是有道理的!

http://youtu.be/74WdfqAB8mY

答案4

剛剛遇到同樣的問題...

如果你想要一個快速的解決方案(並且不關心“.”的使用),那麼只需找到所有“.”並替換為“_” - 這將允許Excel以層次結構方式排序。

排序幾乎可以工作..現在您需要做的就是在資料中添加一個尾部“下劃線”...因此帶有一個字元“1”的資料變成“1_”(資料中的字元數)

相關內容