【问题标题】:Excel VBA: Sort a worksheet virtually?Excel VBA:虚拟排序工作表?
【发布时间】:2012-08-06 13:34:37
【问题描述】:

我有一个工作表,其中包含一堆不按特定顺序排列的行。为了加快我的宏,我想按“名称”(B 列)的字母顺序对条目进行排序。然而,我的老板不希望这张纸真正排序——天知道为什么,但他是老板。

基本上我想做的是对范围进行排序,运行我的宏,然后将其返回到原始顺序。但是因为原来的顺序没有“顺序”,我不能简单地使用不同的排序方式。

我知道快速排序算法,我总是可以将范围拆分为一个范围数组,每行一个条目,然后对该数组进行排序。但是我想知道是否有更有效的方法?

【问题讨论】:

  • 最简单的方法是创建工作表的副本。进行排序和其他必要的工作,完成后删除工作表。这样您的原始工作表就不会受到影响。

标签: excel vba


【解决方案1】:

在我的评论之外,这里有一个例子,它可以让你的原始工作表保持不变。

Sub Sample()
    Dim ws As Worksheet

    Set ws = Sheets("Sheet1").Copy(Before:=Sheets(1))

    With ws
        .Columns("B:B").Sort key1:=.Range("B1"), order1:=xlAscending

        '
        '~~> Do your stuff
        '
    End With

    '~~> Delete sheet once you are done.       
    Application.DisplayAlerts = False
    ws.Delete
    Application.DisplayAlerts = True

    Set ws = Nothing
End Sub

【讨论】:

    【解决方案2】:

    您可以向工作表添加另一列(永久或临时),其中包含一个排序索引号(数字在工作表中按顺序排列)。一旦你完成了你需要做的事情,对这个额外的列进行排序将使数据恢复原样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多