0

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

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

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

4

2 回答 2

1

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

于 2012-08-06T04:59:11.783 回答
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
于 2012-08-06T05:34:37.503 回答