Excel

【Excel】VBAマクロで並び替え(複数条件、複数列)方法【昇順や降順、Sort、Range】

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

この記事では、ExcelのVBAマクロで複数列(複数条件)の並び替え方法について解説していきます。ポイントとしては、`Sort`、`Range`、`SortFields.Add`を使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

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

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

VBAマクロで複数列の並び替えをする方法(2列を独立で並び替える)【Sort】

それではまず、2列を独立で並び替える方法について解説していきます。

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


Sub sorutoRiyouHitori()

    Dim sheeto As Worksheet
    Dim kijuntu As Range

    ' 作業するシートの設定
    Set sheeto = ThisWorkbook.Worksheets("Sheet1")

    ' A列の並び替え
    Set kijuntu = sheeto.Range("A2")
    sheeto.Sort.SortFields.Clear
    sheeto.Sort.SortFields.Add2 Key:=kijuntu, SortOn:=xlSortOnValues, Order:=xlAscending
    sheeto.Sort.SetRange sheeto.Range("A2:A" & sheeto.Cells(Rows.Count, 1).End(xlUp).Row)
    sheeto.Sort.Apply

    ' B列の並び替え
    Set kijuntu = sheeto.Range("B2")
    sheeto.Sort.SortFields.Clear
    sheeto.Sort.SortFields.Add2 Key:=kijuntu, SortOn:=xlSortOnValues, Order:=xlAscending
    sheeto.Sort.SetRange sheeto.Range("B2:B" & sheeto.Cells(Rows.Count, 2).End(xlUp).Row)
    sheeto.Sort.Apply

End Sub

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

このコードでは、まずA列を昇順に並び替え、次にB列を昇順に並び替える処理を行います。つまり、A列とB列は独立して昇順に並び替えられます。

 

VBAマクロで複数列の並び替えをする方法(a列の並び替え優先で、その後にb列)【SortFields.Add】

続いては、a列の並び替えを優先し、その後にb列の並び替えを行う方法について解説していきます。

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


Sub sorutoJunban()

    Dim sheeto As Worksheet
    Dim kijuntuA As Range, kijuntuB As Range

    ' 作業するシートの設定
    Set sheeto = ThisWorkbook.Worksheets("Sheet1")

    ' 並び替え基準の設定
    Set kijuntuA = sheeto.Range("A2")
    Set kijuntuB = sheeto.Range("B2")

    ' A列の並び替えを優先して、次にB列の並び替えを行う
    sheeto.Sort.SortFields.Clear
    sheeto.Sort.SortFields.Add2 Key:=kijuntuA, SortOn:=xlSortOnValues, Order:=xlAscending
    sheeto.Sort.SortFields.Add2 Key:=kijuntuB, SortOn:=xlSortOnValues, Order:=xlAscending
    sheeto.Sort.SetRange sheeto.Range("A2:B" & sheeto.Cells(Rows.Count, 1).End(xlUp).Row)
    sheeto.Sort.Apply

End Sub

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

このコードでは、A列を昇順に並び替えた後、同じ値が存在する場合にB列を昇順に並び替える処理を行います。

まとめ

この2つの方法を活用することで、複数列の並び替えを効率的に行うことができます。変数名は日本語表記をローマ字にしたような表現をしていますが、理解しやすい名前をつけることが重要です。

興味を持った方は、是非自身のExcel環境で試してみてくださいね!