ゼロスタートで1BTC達成  (`・ω・´)σ  普通の会社員がコツコツ資産運用で生活向上するBlog

【Excel VBA】データの並び替え Sort 基本の使い方|初心者向けにソートをやさしく解説

  • 2022-03-29
  • 2024-09-15
  • Excel

VBAを学びたいけれど、難しくて頭に入って来ないと諦めそうになっていませんか?

( ;’ω’*)σ VBA指南サイトって文字ビッシリで解読不能な暗号に見えてくるものが多いですよね。

このサイトでは図解を豊富に交えて初心者でもすんなりVBAの世界に入り込めるような解説をしています。エキスパート向けではありませんが、基本を押さえたい方にはぴったりの内容です。

(*’ω’*)σ この記事では操作画面と照らし合わせながら作業を進められるように解説していきます。

▼ 本記事でわかる事

  •  VBA並べ替え処理の基本的な使い方
  •  条件に応じた並べ替えを行う方法

ソートの基本構造|.Sort .SortFields

ソートについてはExcel2007以降で格段に使いやすくなりました。Excel2003までのソートは少し使い勝手が悪いので今回は割愛します。

基本の流れ

With ワークシートオブジェクト.Sort ’ソートを行う対象を取得
 .SortFields.Clear ’前回の情報を消去
 .SortFields.Add(Key,SortOn,Order) ’並べ替えの基準や詳細
 .SetRange ’並べ替えを行う範囲
 .Header ’先頭行をヘッダーにするかどうか
 .Apply ’並べ替えを実行
End with

これは定型文のようなもので、ここに並べ替えの基準や詳細、並べ替えを行う範囲、先頭行をヘッダーにするかを書き加えていきます。今回は数量順に並べ替えるプロシージャを作成してみます。

Sub 並べ替え()
 With ActiveSheet.Sort
  .SortFields.Clear
  .SortFields.Add Key:=Range(“D3”), SortOn:=xlSortOnValues, Order:=xlDescending
  .SetRange Range(“A3”).CurrentRegion
  .Header = xlYes
  .Apply
 End With
End Sub

3行目の.SortFields.Clearは定型文として必要な部分です。前回までの設定が残っていたりするとマクロが思った通りに実行されない場合があるので、一度ニュートラルにする役割として覚えておきましょう。

4行目の.SortFields.Addのあとは「引数」をカンマで区切って並べ替えの条件を設定します。
「Key」D列(数量)を基準に並べ替えを行う。D3が起点なのでRange(“D3”)とします。
「SortOn」セルの値(数量)を基準に並べ替えるのでxlSortOnValuesとします。
「Order」売上が多い物から並べたいので降順XlDescendingとします。

▼ 引数の種類と用途などの概要

引数用途設定値内容
Key並べ替えの基準にする列を指定Range(“○○”)基準値の指定
SortOn並べ替えの基準を指定xlSortOnValuesセルの値
xlSortOnCellColorセルの色
xlSortOnFontColorフォントの色
xlSortOnIcon条件付き書式のアイコン
Order並べ順を指定xlAscending昇順
xlDescending降順
CustomOrderユーザー設定リストを利用して並べ替え“A,B,C,D,E”カンマで区切って並び替えたい順番を指定する
DataOption並べ替えの方法を指定xlSortNormal数値データとテキストデータを別に並べ替える
xlSortTextAsNumbersテキストを数値データとして並べ替える

5行目の.SetRangeで並べ替えを行うセル範囲を指定しています。表の一番左上のA3セルを含むアクティブセル領域(連続してデータが入力されている、ひとつながりの範囲のこと)なのでRange(“A3”).CurrentRegionです。

6行目の.Headerで先頭行をヘッダー(見出し)にするかどうかを指定します。今回は先頭行をヘッダーにするのでxlYesです。先頭行も並べ替えしたい場合はヘッダーにしないxlNoとします。

7行目の.Applyで並び替え実行です。

いろいろなソート|用途に応じた使用例で解説

Sortと他の指示を組み合わせることで、用途に合わせた様々な処理を自動化する事ができます。

複数の条件を指定した並び替え

売上数量が同数ならば売上金額が多い順に並べたい場合、どのような処理をすれば良いでしょうか?

サンプルプロシージャ

Sub 並べ替え複数条件()
 With ActiveSheet.Sort
  .SortFields.Clear
  .SortFields.Add Key:=Range(“D3”), SortOn:=xlSortOnValues, Order:=xlDescending
  .SortFields.Add Key:=Range(“E3”), SortOn:=xlSortOnValues, Order:=xlDescending
  .SetRange Range(“A3”).CurrentRegion
  .Header = xlYes
  .Apply
 End With
End Sub

5行目に2つ目の条件を追記しました。実行してみると下図のようになります。D列の数量が同じ値の場合、2つ目の判断基準としてE列の売上金額が多い順に並び替えされました。

色を基準に並べ替え

色を基準に並べ替えることも可能です。せっかくなので条件分岐繰り返し処理複合版でやってみます。売上金額が¥70,000以上ならフォントを青、¥50,000以上ならフォントを黄緑にして、青→黄緑→その他の順番に並び替えます。→条件分岐の記事 →繰り返し処理の記事

サンプルプロシージャ

Sub 売上を色分けして並び替え()
 Dim 売上金額 As Range
 For Each 売上金額 In Range(“E4:E13”)
  If 売上金額.Value >= 70000 Then
   売上金額.Resize(1, 1).Font.ColorIndex = 5
  ElseIf 売上金額.Value >= 50000 Then
   売上金額.Resize(1, 1).Font.ColorIndex = 4
  End If
 Next
 With ActiveSheet.Sort
  .SortFields.Clear
  .SortFields.Add(Key:=Range(“E3”),SortOn:=xlSortOnFontColor,Order:=xlAscending) _
  .SortOnValue.ColorIndex = 5
  .SortFields.Add(Key:=Range(“E3”),SortOn:=xlSortOnFontColor,Order:=xlAscending) _
  .SortOnValue.ColorIndex = 4
  .SetRange Range(“A3”).CurrentRegion
  .Header = xlYes
  .Apply
 End With
End Sub

For Each~Nextで金額次第で色を変える処理をします。その後xlSortOnFontColorを用いてColorIndex5(青)、さらにxlSortOnFontColorColorIndex4(黄緑)の順に並べ替えの処理をするという流れの記述です。マクロを実行すると下図のようになります。

ユーザー設定リストの順に並び替え

昇順や降順ではなく自分で決めた順番で並び替えたい時は引数のCustomOrderを使います。東から西に向かって産地順に並べ替えてみましょう。

サンプルプロシージャ

Sub リスト順に並べ替え()
 With ActiveSheet.Sort
  .SortFields.Clear
  .SortFields.Add Key:=Range(“F3”), CustomOrder:=“栃木,静岡,奈良,福岡,佐賀,長崎”
  .SetRange Range(“A3”).CurrentRegion
  .Header = xlYes
  .Apply
 End With
End Sub

CustomOrder:=の後、並べたい順番にカンマで区切ってダブルクォーテーション””で囲います。実行すると下図のようになります。

まとめ|VBAで時短した先にはアナザースカイ

一つ一つの処理は単純なものですが、様々なマクロを組み合わせることで夢の時短が実現します。そのためには・・・基本をおさえることが大切です。

ガッツリ深堀りしたりしないで、いろいろな使い方の基本をサクサクとつまんでいく感じです。いろいろな味を知ってグルメになっていきましょう!