我有一个由 excel 中的数字组成的数据集,包含 300 行和 2677 列,我希望遍历每一列并将它们从最大到最小排序。
我试图修改下面的代码,但找不到循环遍历每一列并按从大到小排序的方法,有人可以帮我吗?
Range("I5").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Add2 Key:=Range("I5:I312" _
), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet3").Sort
.SetRange Range("I5:I312")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
最佳答案
请尝试下一个代码。无需选择任何东西,选择只消耗Excel资源,并没有带来任何好处:
Sub SortColumns()
Dim sh As Worksheet, lastCol As Long, i As Long
Set sh = Worksheets("Sheet3")
lastCol = 2677 'it can be calculated, if all existing columns should be sorted
With Application 'a little optimization
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
For i = 1 To lastCol
sh.Range(sh.cells(5, i), sh.cells(5, i).End(xlDown)).Sort key1:=sh.cells(5, i), _
order1:=xlDescending, Header:=xlGuess, Orientation:=xlSortColumns
Next i
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
上面的代码假定排序范围内不存在空单元格。如果它们可能存在,则要排序的范围的最后一行应该以不同的方式计算。我保留了你的计算方式,但没有选择......
关于excel - 使用VBA循环遍历每一列并从大到小排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70078445/