Excel VBAで複数の列を基準にデータをソートする方法を、実践的なコード例とともに解説。業務効率化を目指す方必見のテクニックを紹介します。
具体的な使い方や、注意点やサンプルコードも記載しています。
日常業務でExcelを多用し、手動作業を減らしたいと考えている方へ
本サイト参考:Excel VBAで自動化するコードのベースを習得したい方におすすめの記事
目次
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 ソート 複数列のサンプルコード
基本的な文法やVBAの実践的な応用までを網羅的に学習できる方法は、ExcelVBAエキスパート資格の取得を目指すこと。学習を通して、より効率的に、着実に基礎を身につけることが可能です。資格取得すれば、スキルの証明にもなり、職場での評価アップにも繋がるため、勉強を進めるモチベーションにもなります。
本サイト参考:マクロ知識がないから「何から学べば良いのかわからない」という人におすすめの記事
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列にわたるデータを操作するため、この範囲を指定しています。
・範囲は必要に応じて変更できます。
ソート設定の初期化
.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で自動化するコードのベースを習得したい方におすすめ!
VBAエキスパート資格は、日常業務でExcelを多用し、手動作業を減らしたいと考えている方には価値あるものです。
ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。
ExcelVBAエキスパートスタンダード
ExcelVBAの開発を仕事にする人が対象の問題集です。
Excel VBA エキスパート資格について知りたい方は、下記「Excel VBAスキルアップを目指すなら知っておきたいVBAエキスパート」をご確認ください。