Tenho uma coluna de "números" no Excel que gostaria de ordenar 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 número ou texto, o Excel os classifica da seguinte forma:
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 "classificação natural" - em uma linguagem de programação como PHP, isso seria realizado pelonatsort
função. Mas não consigo encontrar uma maneira de classificar dessa maneira no Excel.
Para ajudar a fornecer algum contexto: Esses números representam seções e subseções - não decimais, mas sim como itens de lista:
1. Section
1. Sub-section
2. Sub-section
1. Item
6. Item
9. Item
10. Item
11. Item
3. Sub-section
Responder1
Você pode fazer 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)
Isso 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
Então você pode fazer uma classificação personalizada pelas colunas num1, num2 e num3.
Responder2
Tive bons resultados ao inserir uma função definida pelo usuário. A 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, os sub-subitens em milionésimos e assim por diante. Por exemplo,
1.2.3
voltaria 1,002,003
enquanto
1.51.5.5
retorna 1,051,005.005
- e esses números podem ser usados para classificação.
Acho que isso é menos complicado do que usar funções de string na planilha ou classificar em várias colunas.
A UDF é a 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
Responder3
Doug explica isso em detalhes. Eu espero que faça sentido!
Responder4
Acabei de enfrentar o mesmo problema ...
se você deseja uma solução rápida (e não se preocupa com o uso de ".", basta encontrar todos os "." e substituir por "_" - isso permitirá que o Excel classifique em uma hierarquia.
a classificação quase funcionará .. agora tudo que você precisa fazer é adicionar um "sublinhado" aos seus dados ... para que os dados com um caractere "1" se tornem "1_" (para o número de caracteres em seus dados)