Используйте переменную вместо столбцов - PullRequest
0 голосов
/ 27 апреля 2018

Я редактирую этот код, который я записал, и мне интересно, как заменить столбцы («A: A») на переменную i

Код состоит в том, чтобы выбирать каждый столбец по очереди и сортировать от наибольшего к наименьшему.

Я использую i для перебора столбцов. Проблема в том, что я не уверен, как преобразовать код, который в настоящее время ссылается на диапазон A1 или диапазон A: A, чтобы вместо этого использовать столбец i.

Sub sort_largest()

Dim i As Long

i = 1 + 1

Do Until Cells(1, i) = ""




Columns("A:A").Select
    ActiveWorkbook.Worksheets("Pivot Tables").Sort.SortFields.clear
    ActiveWorkbook.Worksheets("Pivot Tables").Sort.SortFields.Add Key:=Range("A1" _
        ), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Pivot Tables").Sort
    .SetRange Range("A:A")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

i = i + 1
Loop

End Sub

1 Ответ

0 голосов
/ 27 апреля 2018

Вот быстрое переписывание с использованием вашей переменной вместо жестко закодированных диапазонов:

Sub sort_largest()

    Dim i As Long

    i = 2
    Do Until Cells(1, i) = ""

        ActiveWorkbook.Worksheets("Pivot Tables").Sort.SortFields.clear
        ActiveWorkbook.Worksheets("Pivot Tables").Sort.SortFields.Add Key:=Cells(1, i), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Pivot Tables").Sort
            .SetRange Columns(i)
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

        i = i + 1
    Loop

End Sub 

Самый хитрый бит - это переключение Range("A1"), поскольку ваши столбцы в цикле в переменной i являются числовыми. Вместо этого вы можете ссылаться на этот диапазон, используя очень удобный объект Cells(), который принимает два параметра: числовую строку и числовой столбец. Таким образом, Range("A1") - это то же самое, что и Cells(1, 1), тогда мы можем просто заменить эту вторую 1 на переменную.

p.s. Я не проверял это, поэтому он может не быть 100%, но я думаю, что он будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...