Вот быстрое переписывание с использованием вашей переменной вместо жестко закодированных диапазонов:
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%, но я думаю, что он будет работать нормально.