【问题标题】:Sort multiple columns of Excel in VBA given the top-left and lowest-right cell给定左上角和右下角的单元格,对 VBA 中的多列 Excel 进行排序
【发布时间】:2015-06-15 07:23:57
【问题描述】:

我正在尝试使用 VBA 在 excel 中对这三列(Sort By Col-2)进行排序。 左上角(行号和列号,例如 1,1)和右下角的单元格(行号和列号,例如 9,3)是已知的。 每个单元格都包含 String 类型的值。

输入:

Col-1      Col-2    Col-3

P1         I1       XYZ 1 | XYZ 2 | XYZ 3
P8         I4       XYZ 26 | XYZ 27 | XYZ 28 | XYZ 29
P3         I2       XYZ 10 | XYZ 11 | XYZ 12
P6         I5       XYZ 19 | XYZ 20 | XYZ 21
P5         I2       XYZ 16 | XYZ17 | XYZ 18
P9         I1       XYZ 4 | XYZ 5 | XYZ 6
P7         I3       XYZ 22 | XYZ 23 | XYZ 24 | XYZ 25
P4         I2       XYZ 13 | XYZ14 | XYZ 15
P2         I2       XYZ 7 | XYZ 8 | XYZ 9

输出:

Col-1      Col-2    Col-3

P1         I1       XYZ 1 | XYZ 2 | XYZ 3
P9         I1       XYZ 4 | XYZ 5 | XYZ 6
P3         I2       XYZ 10 | XYZ 11 | XYZ 12
P5         I2       XYZ 16 | XYZ17 | XYZ 18
P4         I2       XYZ 13 | XYZ14 | XYZ 15
P2         I2       XYZ 7 | XYZ 8 | XYZ 9
P7         I3       XYZ 22 | XYZ 23 | XYZ 24 | XYZ 25
P8         I4       XYZ 26 | XYZ 27 | XYZ 28 | XYZ 29
P6         I5       XYZ 19 | XYZ 20 | XYZ 21

宏录制给了我以下代码:

Sub SortingRecord()
'
' SortingRecord Macro
'

'
ActiveWorkbook.Worksheets("Sheet6").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet6").Sort.SortFields.Add Key:=Range("B1:B9"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet6").Sort
    .SetRange Range("A1:C9")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub

问题是我是 VBA 新手,无法理解此代码中使用的许多术语的含义。那么如何确定哪些语句对于编程解决方案是真正必要的。

我正在做的代码不需要工作表编号,因为我在特定工作表上运行宏,那么如何使用排序方法?

请尝试帮助我解决这个问题。我不想通过选择单元格来获取范围,所以也想使用问题中给出的单元格编号来使程序动态化(因为行数和列数可能会发生变化)。

【问题讨论】:

标签: vba excel sorting


【解决方案1】:

我在阅读了许多教程后得到了解决方案,因此在这里发布以供任何需要帮助的人参考。

Sub testSort()
Dim CurrentSheet As Worksheet
Set CurrentSheet = ActiveSheet

lastRows = CurrentSheet.Cells(Rows.Count, 1).End(xlUp).Row
lastCols = CurrentSheet.Cells(1, Columns.Count).End(xlToLeft).Column

Set sortA = CurrentSheet.Range(Cells(2, 1), Cells(lastRows, lastCols))

CurrentSheet.Sort.SortFields.Clear
CurrentSheet.Sort.SortFields.Add Key:=Range(Cells(2, 2), Cells(lastRows, 2)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With CurrentSheet.Sort
    .SetRange sortA
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub

注意:要排序的范围从 row=2 和 column=1 开始。

【讨论】:

    猜你喜欢
    • 2013-12-22
    • 2021-08-21
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2018-12-29
    相关资源
    最近更新 更多