Excel VBAで複数列のデータを簡単ソート!実践コードと効率化テクニック

 

Excel VBAで複数の列を基準にデータをソートする方法を、実践的なコード例とともに解説。業務効率化を目指す方必見のテクニックを紹介します。

具体的な使い方や、注意点やサンプルコードも記載しています。

 

日常業務でExcelを多用し、手動作業を減らしたいと考えている方へ
本サイト参考:Excel VBAで自動化するコードのベースを習得したい方におすすめの記事

 

Excel VBAで複数列ソートのシーンとメリット

Excelの大量データを処理する上では、複数列を基準としたソートが必須となることが多くあります。例えば、毎月の売上レポートを日付と商品カテゴリでそれぞれ表示したいといった場合、日付と商品カテゴリの両方を基準としたソートが必要です。

複数列ソートの利用シーン

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エキスパート」をご確認ください。