
Excel VBAで複数の列を基準にデータをソートする方法を、実践的なコード例とともに解説。業務効率化を目指す方必見のテクニックを紹介します。
具体的な使い方や、注意点やサンプルコードも記載しています。
📌 「これ、自動化できたらラクなのに…」と思ったこと、ありませんか?
実はその作業、Excelマクロで簡単に自動化できるかもしれません。
「でもマクロって難しそう…」という方のために、完全初心者向けの入門記事をご用意しました!
👇実務で“そのまま使える”テンプレ付きで、コピペするだけ!
初心者向けエクセルマクロの作り方を解説|コピペOK実務テンプレ付き
Excel VBAで複数列ソートのシーンとメリット
複数列ソートの利用シーン
1.データ整理
売上データや仕入データなど、複数の条件を基にデータを整理したい場合に有効です。
2.レポート作成
複数の基準でデータを並び替えて、見やすいレポートを作成する際に利用します。
メリット
1. データの解析スピードが向上
2. 正確なデータ表示
3. 部分的なデータにすばやくアクセスできる
Excel VBA Sortオブジェクトの基本的な使い方
1.Sortオブジェクトを使用し、ソートする範囲と基準の列を設定します。
2.複数の条件を設定する場合は、.SortFields を繰り返し使い、条件ごとに設定します。
1. .SortFields.Clear
まず、ソート条件をすべてクリアします。
2. .SortFields.Add
ソート条件を追加します。ここでは、列を複数指定します。
3. .SetRange
ソートする範囲を指定します(A1:C10)など。
4. .Header = xlYes
データに見出し行があることを指定します。
5. .Apply
ソートを実行します。
1.正しい範囲の指定
ソート対象の範囲を正しく指定しないと、他のデータが混乱する可能性があります。
2.キー順序
複数条件でのソートでは、上位の条件から優先的に適用されるため、順序を考慮する必要があります。
Excel VBA ソート 複数列のサンプルコード
Option Explicit
Sub SortMultipleColumns()
Dim ws As Worksheet
Dim rng As Range
' 対象のシートを指定
Set ws = ThisWorkbook.Worksheets("データシート")
' ソート対象の範囲を設定
Set rng = ws.Range("A1:C100")
' ソートの設定
With ws.Sort
.SortFields.Clear ' 既存のソート設定をクリア
' 1列目(A列)を昇順でソート
.SortFields.Add Key:=ws.Range("B1:B100"), Order:=xlAscending
' 2列目(B列)を降順でソート
.SortFields.Add Key:=ws.Range("C1:C100"), Order:=xlDescending
' ソートの適用
.SetRange rng
.Header = xlYes ' ヘッダー行があることを指定
.MatchCase = False ' 大文字・小文字の区別をしない
.Orientation = xlTopToBottom ' 上から下に向けてソート
.Apply ' ソートを実行
End With
End Sub
自分の実力を客観的にチェックしたい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集をご用意しました。
コードの解説
このコードは、Excel VBAを使用して、複数列のデータを条件に基づいて並べ替える方法を実現しています。
A列を昇順(小さいものから大きいものへ)
B列を降順(大きいものから小さいものへ)
この処理は、売上データや仕入データなど、複数の条件を使ってデータを整列する必要がある場面で非常に有用です。
対象のシートを指定
Set ws = ThisWorkbook.Worksheets("データシート")
・Set wsで、操作するシートを指定します。
・"データシート"は、データが含まれているシート名です。これを実際のシート名に変更してください。
・ThisWorkbookは、このマクロが含まれるブックを指します。
ソート対象の範囲を設定
Set rng = ws.Range("A1:C100")
・ソートする範囲(A1からC100)を設定します。
・A列からC列にわたるデータを操作するため、この範囲を指定しています。
・範囲は必要に応じて変更できます。
ソート設定の初期化
.SortFields.Clear
・SortFields.Clearは、過去に設定されたソート条件をリセットします。
・これにより、新しいソート条件が正しく適用されるようになります。
ソート条件を追加
.SortFields.Add Key:=ws.Range("A1:A100"), Order:=xlAscending
・A列(1列目)を昇順でソートする条件を追加します。
・Order:=xlAscendingは、昇順(小さいものから大きいものへの順序)を指定します。
.SortFields.Add Key:=ws.Range("B1:B100"), Order:=xlDescending
・B列(2列目)を降順でソートする条件を追加します。
・Order:=xlDescendingは、降順(大きいものから小さいものへの順序)を指定します。
ソート範囲とオプションを設定
.SetRange rng
・ソート対象の範囲全体を指定します。ここでは、A1:C100が範囲です。
vba
.Header = xlYes
・ソート範囲の中にヘッダー(列名)があることを指定します。これにより、ヘッダー行はソート対象から除外されます。
vba
.MatchCase = False
・大文字と小文字を区別しない設定です(例: "A"と"a"を同一視します)。
ソートを実行
.Apply
・最後に、設定したソート条件をデータに適用します。
1.ヘッダー行がある場合
・.Header = xlYesが正しく設定されていないと、ヘッダー行もソートされる可能性があります。
2.データ範囲の確認
・ソート対象範囲(A1:C100)が正しいかどうかを確認してください。データ量が変動する場合、範囲を動的に設定する方法(例: UsedRange)も検討してください。
3.空白セルの処理
・空白セルがある場合、ソート順序に影響することがあります。必要に応じて、空白セルを含めるか除外する設定をしてください。
複数条件のソートは、データを複数の基準で整理する際に非常に便利です。使い方は、1つ目の条件を設定し、次に2つ目以降の条件を順次追加していく形です。範囲の指定や条件の順序に注意して設定することで、正確なソートを行えます。
「Excel VBAで自動化するコードのベースが習得できる解説書」
Excel VBAエキスパートベーシックとスタンダード、どちらを選べばいいか判断が難しい…。そんな方のために、自分に合ったスタート地点がわかる無料のExcelVBAベーシック選択問題集を用意しました。
