Como ordenar números de estilo de lista no Excel?

5

Eu tenho uma coluna de "números" no Excel que gostaria de classificar da seguinte forma:

1.1
1.2
1.2.1
1.2.6
1.2.9
1.2.10
1.2.11
1.3

No entanto, independentemente de o tipo da célula ser um número ou texto, o Excel os classifica da seguinte maneira:

1.1
1.2
1.2.1
1.2.10
1.2.11
1.2.6
1.2.9
1.3

Isso também poderia ser chamado de "Natural sorting" - em uma linguagem de programação como o PHP isso seria realizado pelo natsort função . Mas não consigo encontrar uma maneira de classificar dessa maneira dentro do Excel.

Para ajudar ainda mais a fornecer algum contexto: esses números representam seções e subseções - não decimais, mas sim itens de lista:

1. Section
    1. Sub-section
    2. Sub-section
        1.  Item
        6.  Item
        9.  Item
        10. Item
        11. Item
    3. Sub-section
    
por Nick 08.09.2011 / 23:14

3 respostas

1

Você pode criar uma tabela para dividir os valores:

Para cada coluna, use os títulos (linha 1) e fórmulas (linha 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)  

Aparece como:

      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

Depois, você pode fazer uma classificação personalizada pelas colunas num1, num2 e num3.

    
por 09.09.2011 / 02:19
1

Eu tive bons resultados ao inserir uma função definida pelo usuário. O UDF retorna um valor que representa o total do número da seção em milhões, o número da subseção em milhares, o número do item em unidades, o subitem (se houver) em milésimos, sub-subitens em milionésimos e assim por diante. Por exemplo,

1.2.3 retornaria 1,002,003 enquanto

1.51.5.5 retorna 1,051,005.005 - e esses números podem ser usados para classificação.

Acho isso menos trabalhoso do que usar funções de string na planilha ou classificar em várias colunas.

O UDF é o seguinte:

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
    
por 01.11.2011 / 19:45
0

Doug explica isso em detalhes. Eu espero que faça sentido!

link

    
por 06.03.2013 / 18:30