0

列の範囲の行をインクリメントし、各行の範囲で並べ替えを実行できませんでした。誰かが私を案内してくれますか?

マクロまたは VBA を使用して、データのすべての行 (約 765 行) を一度に 1 行ずつ、5 列の整数を左から右に昇順に並べ替えるにはどうすればよいですか。

各行には 6 列のデータがありますが、並べ替える必要があるのは最初の 5 列だけです。各行には同じ量の列とデータがあり、空白または NULL エントリを持つセルはありません。行の各列には、その行に固有の整数が含まれます。

各行は、前または次の行とは無関係に並べ替える必要があり、各行の 6 番目の列は、並べ替えられた前の 5 つの列のままにする必要があります。

各行で並べ替えを実行するために、列の範囲をインクリメントする方法を理解できませんでした。とても感謝しています。

4

1 に答える 1

0

並べ替えたい 5 つの列は A から E であると想定しています。このマクロは各列 (列全体) をループし、隣接する列とは無関係に並べ替えます。

これを試して:

Sub Macro2()
    Set rng = Range("A:E")

    For Each col In rng.Columns
        Set rng = Columns(col.Column)

        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Cells(1, col.Column), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Sheet1").Sort
            .SetRange rng
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Next
End Sub

データは次のようになります。

ここに画像の説明を入力

マクロを実行すると、次のようになります。

ここに画像の説明を入力

最後の列は変更されていないことに注意してください。


****編集****

上記のように、列の代わりに行を左から右に並べ替える方法を次に示します (行 A1 から A10 を列 'A' から列 'E' に並べ替えます)。

Sub Macro2()
    Set Rng = Range("A1:E10")
    col = Rng.Cells(Rng.Count).Column

    Dim lastcol As Integer
    lastcol = Rng.Cells(Rng.Count).Column

    For Each rrow In Rng.Rows
        Set RngB = Range(ActiveSheet.Cells(rrow.Row, Rng.Column), ActiveSheet.Cells(rrow.Row, lastcol))

        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=RngB, _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Sheet1").Sort
            .SetRange RngB
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlLeftToRight
            .SortMethod = xlPinYin
            .Apply
        End With
    Next
End Sub
于 2013-10-03T18:18:07.787 に答える