首页 > 解决方案 > Excel VBA - 说明

问题描述

我只是想知道是否有人对这段 VBA 代码的作用有任何建议。我的一位同事最近离开了,没有评论他们的任何工作,所以我有点困惑。

有一些代码可以对某些单元格进行排序,但我不确定它是如何知道要排序的,因为指定了一个范围,这不是我想要排序的数据。我想我遗漏了一些东西,但网上似乎没有什么可以很好地解释 Excel VBA。

代码如下所示:

    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.ActiveSheet.SORT.SortFields.Clear
    ActiveWorkbook.ActiveSheet.SORT.SortFields.Add Key:=ActiveCell, _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.ActiveSheet.SORT
        .SetRange ActiveCell.Range("A1:A550")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveCell.Offset(0, 1).Range("A1").Select

我知道最重要的东西设置了用于对数据进行排序的标准,但我不确定为什么 range("A1:A550") 存在,因为要排序的数据通常从单元格 C15 周围的某个地方开始。代码是否只是说“将当前单元格用作 A1,从中选择接下来的 550 行并相应地对数据进行排序”?

谢谢大家。

标签: excelvba

解决方案


.SetRange ActiveCell.Range("A1:A550")代码中的行是对于由该行确定的范围Range(Selection, Selection.End(xlDown)).Select- 只是说使用前 550 行。(如果选择的单元格少于 550 个,则会扩展选择以匹配,因此实际上不需要第一行)

也就是说,整个块可以做得更短,在没有任何“无关”代码的情况下做完全相同的事情:

Range(Selection.Cells(1,1), Selection.Cells(550, 1)).Sort Selection, xlAscending, _
    Header:=xlNo, Orientation:=xlSortColumns, SortMethod:=xlPinYin
ActiveCell.Offset(0, 1).Select

推荐阅读