【问题标题】:Sorting Data in Multiple Columns对多列中的数据进行排序
【发布时间】:2019-06-20 20:43:45
【问题描述】:

我正在尝试对多列中的数据进行排序(准确地说是 9)。本质上,我需要按单独的#(排序号)对它们进行排序,同时保持其余列中的其余信息与排序号对齐。我尝试将此记录为宏并提取代码,但是当我尝试使用相对单元格选择重新创建该代码时,我没有成功。我附上了我正在使用的 excel 文档的屏幕截图。

Screenshot

范围(“B6”).选择

Range(Cells(Selection.Column, 2), Cells((Selection.Column), 26)).Select
ActiveWorkbook.Worksheets("Liability.VarAnn & Other").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Liability.VarAnn & Other").Sort.SortFields.Add Key _
    :=Range(Cells(Selection.Column, 2), Cells((Selection.Column), 26)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("Liability.VarAnn & Other").Sort
    .SetRange Range(Cells(Selection.Column, 2), Cells((Selection.Column), 26))
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

结束子

如果有人可以提供帮助,请提前感谢您!

【问题讨论】:

  • 所以您只需要根据组号(键)对数据进行一般排序?
  • 能否请edit your question 包含您的代码?
  • 刚刚添加代码

标签: excel vba multiple-columns


【解决方案1】:

Sort 的工作原理是识别要排序的区域,然后根据特定列中的键进行排序:

.Range(.Cells(1,1),.Cells(lr,lc)).Sort key1:=Range(.Cells(1,"H"),.Cells(lr,"H")), order1:=xlAscending, Header:=xlNo

因此,如果您需要限制这两个范围之一,您可以在不影响要排序区域中的数据的情况下(从上面,.Range(.Cells(1,1),.Cells(lr,lc)))。

如果我只想通过最后一列 (lc) 和最后一行 (lr) 对某个范围的 H 列进行排序,而不是 A1,我可以:

.Range(.Cells(1,"H"),.Cells(lr,"H")).Sort key1:=Range(.Cells(1,"H"),.Cells(lr,"H")), order1:=xlAscending, Header:=xlNo

另外,请参阅How to avoid using Select in Excel VBA

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 2020-03-21
    • 2011-09-22
    • 2020-02-29
    • 2019-03-31
    • 2019-10-24
    • 2019-06-18
    相关资源
    最近更新 更多