¿Cómo ordenar números estilo lista en Excel?

¿Cómo ordenar números estilo lista en Excel?

Tengo una columna de "números" en Excel que me gustaría ordenar de la siguiente manera:

1.1
1.2
1.2.1
1.2.6
1.2.9
1.2.10
1.2.11
1.3

Sin embargo, independientemente de si el tipo de celda es número o texto, Excel las ordena de la siguiente manera:

1.1
1.2
1.2.1
1.2.10
1.2.11
1.2.6
1.2.9
1.3

Esto también podría denominarse "clasificación natural"; en un lenguaje de programación como PHP, esto se lograría mediante elnatsort función. Pero parece que no puedo encontrar una manera de ordenar de esta manera dentro de Excel.

Para ayudar a proporcionar algo de contexto: estos números representan secciones y subsecciones, no decimales, sino elementos de lista:

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

Respuesta1

Puedes hacer una tabla para dividir los valores:

Para cada columna, utilice los títulos (fila 1) y las fórmulas (fila 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)  

Esto 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

Luego puede hacer una clasificación personalizada por las columnas num1, num2 y num3.

Respuesta2

Obtuve buenos resultados al insertar una función definida por el usuario. La UDF devuelve un valor que representa el total del número de sección en millones, el número de subsección en miles, el número de elemento en unidades, el subelemento (si lo hay) en milésimas, los subsubelementos en millonésimas, etc. Por ejemplo,

1.2.3regresaría 1,002,003mientras

1.51.5.5devuelve 1,051,005.005, y estos números luego se pueden usar para ordenar.

Considero que esto es menos engorroso que usar funciones de cadena en la hoja de trabajo o ordenar en varias columnas.

La UDF es la siguiente:

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

Respuesta3

Doug explica esto en detalle. ¡Espero que tenga sentido!

http://youtu.be/74WdfqAB8mY

Respuesta4

Acabo de enfrentar el mismo problema...

Si desea una solución rápida (y no le preocupa el uso de ".", simplemente busque todos los "." y reemplácelos con "_"; esto permitirá que Excel ordene en forma jerárquica.

la clasificación casi funcionará... ahora todo lo que necesita hacer es agregar un "guión bajo" al final de sus datos... para que los datos con un carácter "1" se conviertan en "1_" (según la cantidad de caracteres en sus datos)

información relacionada