Classifique a coluna B mantendo a ordem da coluna A

Classifique a coluna B mantendo a ordem da coluna A

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 Cesteja disponível para uso como uma “coluna auxiliar”. Colocar

=IF(A1=A2, C1, C1+1)

na célula C2. (Se Column Cnã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 1em 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 Ce Column B.

Responder2

Rapido e sujo:-

  1. Copie o conteúdo da coluna A no bloco de notas e copie novamente para a área de transferência.
  2. Selecione ambas as colunas.
  3. Selecione a função de classificação e classifique a coluna A usando a ordem da "lista personalizada".
  4. Insira os dados da área de transferência na lista personalizada.
  5. 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

informação relacionada