Excel VBA:虚拟排序工作表?

时间:2012-08-06 04:51:13

标签: excel-vba vba excel

我有一个没有特定顺序的一堆行的工作表。为了加快我的宏,我想按字母顺序对条目进行排序" Name" (B栏)。但是,我的老板并不希望这张纸真正排序 - 上帝知道为什么,但他是老板。

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

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

2 个答案:

答案 0 :(得分:1)

您可以在工作表中添加另一列(永久或临时),该列包含排序索引编号(在工作表中按顺序编号)。完成所需操作后,对这个额外列进行排序将使数据恢复原状。

答案 1 :(得分: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