
No Excel, tenho 2 colunas. Quero classificar o segundo em ordem alfabética, mantendo a ordem (personalizada) no primeiro (pense em std::stable_sort onde a igualdade é baseada apenas na primeira coluna). Exemplo:
dsf k
www d
www a
azd q
azd e
azd b
Deve se tornar
dsf k
www a
www d
azd b
azd e
azd q
O assistente de classificação não parece ter nenhuma opção "manter a ordem atual". Eu poderia definir a ordem personalizada, mas tenho mais de mil elementos diferentes; isso seria muito chato de fazer e esse pedido personalizado pode mudar a qualquer momento.
Responder1
Presumo que seus dados comecem na Linha 2 e que a Coluna C
esteja disponível para uso como uma “coluna auxiliar”. Colocar
=IF(A1=A2, C1, C1+1)
na célula C2
. (Se Column C
não estiver disponível, use uma que esteja. Se seus dados começarem na Linha 1, insira uma linha em branco ou (ainda) coloque o acima em cell C2
, mas coloque 1
em cell C1
.) Arraste/preencha para baixo. Esta (coluna C
) agora “documenta” seu pedido personalizado; por exemplo, C2
= 1, C3
= C4
= 2 e C5
= C6
= C7
= 3. Agora classifique em Column C
e Column B
.
Responder2
Rapido e sujo:-
- Copie o conteúdo da coluna A no bloco de notas e copie novamente para a área de transferência.
- Selecione ambas as colunas.
- Selecione a função de classificação e classifique a coluna A usando a ordem da "lista personalizada".
- Insira os dados da área de transferência na lista personalizada.
- Adicione um nível à função de classificação e classifique pela coluna B, "do menor para o maior".
Responder3
Acho que sua melhor aposta é usar pedidos personalizados. Se não precisar ser atualizado com frequência, você poderá fazê-lo FILE>OPTIONS>ADVANCED>EDIT CUSTOM LISTS...
e apenas importar o intervalo inteiro. Em seguida, use isso ao classificar.
A solução VBA seria algo como
Subclassificação() Dim iCustListNum como inteiro iCustListNum = Application.CustomListCount + 1 Application.AddCustomList ListArray:=Range("A2:A100") Em caso de erro GoTo errar: 'Classifique sua lista Range("A1:B100").sort Key1:=Range("A1"), Order1:=xlAscendente, OrderCustom:=iCustListNum, _ Chave2:=Intervalo("B1"), Ordem2:=xlAscendente, Cabeçalho:=xlSim, _ MatchCase:=Falso, Orientação:=xlTopToBottom 'Limpar errar: Application.DeleteCustomList ListNum:=iCustListNum Finalizar sub