excel - 使用VBA循环遍历每一列并从大到小排序

标签 excel vba loops sorting

我有一个由 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/

相关文章:

arrays - 删除 VBA 数组中的重复项

excel - 字母数字单元格的条件总和

excel - 使用 VBA 在 Excel 电子表格中将单元格颜色更改为 RGB 值

excel - VBA 中引用/指针的良好替代品?

java - for 循环的 while 部分在 java 中是每次执行一次还是只执行一次?

loops - 如果在lua中执行了inner'for'循环,如何跳出外循环

c - 如何让程序只接受c中的正整数值

excel - 使用 toggle.button 对行集进行分组

excel - 在没有 VBA 的 Excel 中组合动态数组

arrays - 从创建二维数组的 Excel 单元格中读取数组