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