Como alternar a classificação decrescente crescente para uma coluna de nomes de variáveis?

0

Eu quero mudar a classificação de ascendente para descendente sempre que a variável em uma coluna do meu conjunto de dados for alterada. Um exemplo para demonstrar a classificação que quero é o seguinte. Eu tentei adicionar outra coluna para adicionar um número ímpar ou par e, em seguida, classificar crescente quando par e descer quando estranho, mas não sei como fazê-lo funcionar. Como posso alternar classificar essas variáveis por macro, pois não é possível fazer isso manualmente para um grande conjunto de dados?

ID  Sales
Apple   10
Apple   2
Apple   12
Orange      15
Orange      4
Guava   2
Guava   18
Guava   20
Guava   3


ID  Sales
Apple   12
Apple   10
Apple   2
Orange      4
Orange      15
Guava   20
Guava   18
Guava   3
Guava   2

Eu encontrei o código VBA para inserir uma linha em branco quando a variável é alterada. link Isso pode ser modificado para alterar a ordem de classificação?

    sub AddBlankRows()
'
dim iRow as integer, iCol as integer
dim oRng as range

set oRng=range("a1")

irow=oRng.row
icol=oRng.column

do 
'
if cells(irow+1, iCol)<>cells(irow,iCol) then
    cells(irow+1,iCol).entirerow.insert shift:=xldown
    irow=irow+2
else
    irow=irow+1
end if
'
loop while not cells (irow,iCol).text=""
'
end sub
    
por Anusha 14.03.2017 / 13:01

1 resposta

0

Este código VBA pede o número de entrada (qualquer número até mesmo para ascendente, ímpar para descendente) teste com a função Mod e ordene os dados "A1: B11" com cabeçalho você pode alterá-lo para seus dados reais na coluna 1 (A) ascendente, coluna 2 (B) crescente ou decrescente de acordo com o número de entrada

Sub DataSort()  
    Dim theRange As Range 
    Dim rep As Variant 
    Set theRange = Range("A1:B11") 
    rep = InputBox("Enter a number to decide order") 
    If rep Mod 2 = 0 Then    
      With ActiveSheet
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=theRange.Columns(1).Cells, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add Key:=theRange.Columns(2).Cells, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .SetRange theRange
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     End With
    ElseIf rep Mod 2 = 1 Then
        With ActiveSheet
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=theRange.Columns(1).Cells, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add Key:=theRange.Columns(2).Cells, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
         With .Sort
            .SetRange theRange
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
         End With
        End With
    End If
End Sub
    
por 14.03.2017 / 21:10