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.3
regresaría 1,002,003
mientras
1.51.5.5
devuelve 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!
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)