0

特定の順序で並んでいない一連の行を含むワークシートがあります。マクロを高速化するために、エントリを「名前」(列 B) でアルファベット順に並べ替えます。しかし、私の上司はシートが実際にソートされることを望んでいません - 神はその理由を知っていますが、彼は上司です.

基本的に私がやりたいことは、範囲をソートし、マクロを実行してから元の順序に戻すことです。しかし、元の順序に「順序」がないため、単純に別の並べ替え方法を使用することはできません。

私はクイックソートアルゴリズムについて知っており、常に範囲を範囲の配列に分割し、各行に1つのエントリを作成してから、その配列をソートできました。しかし、もっと効率的な方法があるかどうか疑問に思っていましたか?

4

2 に答える 2

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 に答える
1

シートに別の列を (永続的または一時的に) 追加できます。この列には、並べ替えインデックス番号 (シートの下に連続する番号) が保持されます。必要な作業が完了したら、この余分な列で並べ替えを行うと、データが元の状態に戻ります。

于 2012-08-06T04:59:11.783 に答える