Я хочу переключать сортировку с возрастания на убывание всякий раз, когда изменяется переменная в столбце моего набора данных. Пример для демонстрации сортировки, которую я хочу, заключается в следующем. Я попытался добавить еще один столбец, чтобы добавить нечетное или четное число, а затем отсортировать по возрастанию, когда он четный, и по убыванию, если нечетный, но не знаю, как заставить это работать. Как я могу чередовать сортировку этих переменных по макросам, так как это невозможно сделать вручную для большого набора данных?

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

Я нашел код VBA для вставки пустой строки при изменении переменной. ссылка Можно ли это изменить, чтобы изменить порядок сортировки?

    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

1 ответ1

0

Этот код VBA запрашивает входной номер (любое число, даже для возрастания, нечетное для убывания), протестируйте его с помощью функции Mod и отсортируйте данные «A1:B11» с помощью заголовка, вы можете изменить его на свои реальные данные (сортировка по столбцу 1 (A) по возрастанию, столбец 2 (B) по возрастанию или по убыванию в соответствии с входным номером

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .