
Excel VBAで複数の列を基準にデータをソートする方法を、実践的なコード例とともに解説。業務効率化を目指す方必見のテクニックを紹介します。
具体的な使い方や、注意点やサンプルコードも記載しています。
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る
目次
Excel VBAで複数列ソートのシーンとメリット
複数列ソートの利用シーン
1.データ整理
売上データや仕入データなど、複数の条件を基にデータを整理したい場合に有効です。
2.レポート作成
複数の基準でデータを並び替えて、見やすいレポートを作成する際に利用します。
メリット
1. データの解析スピードが向上
2. 正確なデータ表示
3. 部分的なデータにすばやくアクセスできる
Excel VBA Sortオブジェクトの基本的な使い方
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る
1.Sortオブジェクトを使用し、ソートする範囲と基準の列を設定します。
2.複数の条件を設定する場合は、.SortFields を繰り返し使い、条件ごとに設定します。
1. .SortFields.Clear
まず、ソート条件をすべてクリアします。
2. .SortFields.Add
ソート条件を追加します。ここでは、列を複数指定します。
3. .SetRange
ソートする範囲を指定します(A1:C10)など。
4. .Header = xlYes
データに見出し行があることを指定します。
5. .Apply
ソートを実行します。
1.正しい範囲の指定
ソート対象の範囲を正しく指定しないと、他のデータが混乱する可能性があります。
2.キー順序
複数条件でのソートでは、上位の条件から優先的に適用されるため、順序を考慮する必要があります。
Excel VBA ソート 複数列のサンプルコード
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 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
コードの解説
このコードは、Excel VBAを使用して、複数列のデータを条件に基づいて並べ替える方法を実現しています。
A列を昇順(小さいものから大きいものへ)
B列を降順(大きいものから小さいものへ)
この処理は、売上データや仕入データなど、複数の条件を使ってデータを整列する必要がある場面で非常に有用です。
対象のシートを指定
Set ws = ThisWorkbook.Worksheets("データシート")
・Set wsで、操作するシートを指定します。
・"データシート"は、データが含まれているシート名です。これを実際のシート名に変更してください。
・ThisWorkbookは、このマクロが含まれるブックを指します。
ソート対象の範囲を設定
Set rng = ws.Range("A1:C100")
・ソートする範囲(A1からC100)を設定します。
・A列からC列にわたるデータを操作するため、この範囲を指定しています。
・範囲は必要に応じて変更できます。
Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る
ソート設定の初期化
.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つ目以降の条件を順次追加していく形です。範囲の指定や条件の順序に注意して設定することで、正確なソートを行えます。
VBAマクロが書けるベースを作りたい方は、VBAエキスパート資格取得を挑戦してみてください。
VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。
下記から無料問題集ができます。
ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。
ExcelVBAエキスパートスタンダード
ExcelVBAの開発を仕事にする人が対象の問題集です。
Excel VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。