Excel

【Excel】VBAで並び替え(複数列、複数行、3つ以上、複数条件、優先順位をつけてソート、昇順、降順、Sort、Range)方法

当サイトでは記事内に広告を含みます。

この記事では、Excel VBAを使用して、データの並び替えについて解説していきます。

ポイントとしては、`Sort`、`Range`を使用することです。

なお、マクロ初心者でもわかりやすいように変数名をaaaaa変数aaaaaといった名称にしています。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

VBAで並び替え(複数列、複数条件で優先順位をつけてソート、昇順)方法【Sort, Range】

それではまず、複数列と複数条件を持つデータの昇順ソートについて解説していきます。

Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。


Sub aaaaaSortByMultipleColumnsaaaaa()
    Dim aaaaaWsuaaaaa As Worksheet
    Set aaaaaWsuaaaaa = ThisWorkbook.Worksheets("Sheet1")
    
    With aaaaaWsuaaaaa.Sort
        .SortFields.Clear
        ' 1つ目のキー
        .SortFields.Add Key:=Range("A1"), Order:=xlAscending
        ' 2つ目のキー
        .SortFields.Add Key:=Range("B1"), Order:=xlAscending
        
        .SetRange Range("A1:B10")
        .Header = xlYes
        .Apply
    End With
End Sub

コードのAlt+F8を押し、マクロ選択画面でaaaaaSortByMultipleColumnsaaaaa関数を実行します。
このコードでは、A列とB列の2つの列をキーとして昇順に並び替えます。

もちろん、複数行のソートについて詳しく解説いたします。

VBAで並び替え(複数行、複数条件で優先順位をつけてソート、昇順)方法【Sort, Range】

続いては、複数行と複数条件を持つデータの昇順ソートについて解説していきます。

ExcelのVBAで複数行のソートを行う場合、行の代わりに列を基準にソートすることが基本です。

そのため、行を基準としてソートするには、いくつかの工夫が必要です。以下はその一例となります。

Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。


Sub aaaaaSortByMultipleRowsaaaaa()
    Dim aaaaaWsuaaaaa As Worksheet
    Set aaaaaWsuaaaaa = ThisWorkbook.Worksheets("Sheet1")

    ' 一時的に転置してソートする
    Dim aaaaaTempRangeuaaaaa As Range
    Set aaaaaTempRangeuaaaaa = aaaaaWsuaaaaa.Range("Z1:Z10") ' 一時的な範囲としてZ列を使用

    ' A1:J1をZ列に転置
    aaaaaWsuaaaaa.Range("A1:J1").Copy
    aaaaaTempRangeuaaaaa.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    Application.CutCopyMode = False

    ' Z列を基準にしてA列からJ列までの行をソート
    With aaaaaWsuaaaaa.Sort
        .SortFields.Clear
        .SortFields.Add Key:=aaaaaTempRangeuaaaaa, Order:=xlAscending
        .SetRange aaaaaWsuaaaaa.Range("A1:J10")
        .Header = xlNo
        .Apply
    End With

    ' 一時的なZ列をクリア
    aaaaaTempRangeuaaaaa.ClearContents
End Sub

コードのAlt+F8を押し、マクロ選択画面でaaaaaSortByMultipleRowsaaaaa関数を実行します。

このコードでは、A1からJ1までの行をソートするために、まずA1:J1の範囲をZ列に転置します。

その後、Z列を基準にして行のソートを行い、最後に一時的に使用したZ列をクリアしています。

このように、VBAを使って行を基準にしたソートを実現するには、一時的な列を利用して転置やソートを行うといった工夫が必要です。

VBAで並び替え(複数列、3つ以上の複数条件で優先順位をつけてソート、昇順と降順が混合)方法【Sort, Range】

続いては、3つ以上の条件を持ち、昇順と降順が混合したソート方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。


Sub aaaaaSortMixedOrderaaaaa()
    Dim aaaaaWsuaaaaa As Worksheet
    Set aaaaaWsuaaaaa = ThisWorkbook.Worksheets("Sheet1")
    
    With aaaaaWsuaaaaa.Sort
        .SortFields.Clear
        ' 1つ目のキー
        .SortFields.Add Key:=Range("A1"), Order:=xlAscending
        ' 2つ目のキー
        .SortFields.Add Key:=Range("B1"), Order:=xlDescending
        ' 3つ目のキー
        .SortFields.Add Key:=Range("C1"), Order:=xlAscending
        
        .SetRange Range("A1:C10")
        .Header = xlYes
        .Apply
    End With
End Sub

コードのAlt+F8を押し、マクロ選択画面でaaaaaSortMixedOrderaaaaa関数を実行します。

このコードでは、A列、B列、C列の3つの列をキーとして、A列は昇順、B列は降順、C列は昇順として並び替えを行います。

この記事では、ExcelのVBAを使用して、複数の条件や列、行に基づいてデータをソートする方法を紹介しました。この技術をマスターすることで、より複雑なデータのソートや分析が可能となります。