「まずは『部署名』、次に『入社年』、最後は『氏名』の順に並べ替えて……。これをあと50シート分も繰り返すなんて大変だな……」
そんな経験はありませんか?もちろん私自身も経験あります(笑)。
当時は「並べ替えくらい手でやったほうが早い」なんて意地を張っていましたが、選択範囲が漏れてデータの整合性が失われるという痛い失敗も経験しました。
しかし、Excel VBAの「Sortオブジェクト」を活用すれば、こうした実務のミスを完全に防ぐことができます。
ボタンを一度クリックするだけで、何百行ものデータが瞬時に並び替わります。毎日5分を費やしていた作業が自動化されれば、年間で約20時間もの貴重な時間を創出できる計算になります。
そもそもVBAにおける「並べ替え」の仕組みとは?
VBAで並べ替えをする方法はいくつかありますが、一番おすすめなのが、Excel2007から登場した「Sortオブジェクト」を使う方法です。
専門用語に難しさを感じるかもしれませんが、基本は「対象の範囲」「基準となる列(キー)」「並び順(昇順・降順)」の3つを順番に指定するだけなので簡単です。
コピペでOK!複数キー(2つ以上)を指定するコード
今回は、第1優先に「部署名(A列)」を昇順、第2優先に「売上(B列)」を降順として組み合わせたサンプルコードをご紹介します。
Sub MultiColumnSort()
' 対象のシートを指定します
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("売上データ") ' シート名は自分のものに変えてください
' 並べ替えの設定を一度リセットします
ws.Sort.SortFields.Clear
' --- 並べ替えの条件を追加していきます ---
' 【第1優先】A列(部署名)を「昇順(小さい順)」で並べる
ws.Sort.SortFields.Add Key:=ws.Range("A2"), _
Order:=xlAscending ' xlAscendingが昇順、xlDescendingが降順です
' 【第2優先】B列(売上)を「降順(大きい順)」で並べる
ws.Sort.SortFields.Add Key:=ws.Range("B2"), _
Order:=xlDescending
' --- 最後に「実行!」の命令を出します ---
With ws.Sort
.SetRange ws.Range("A1:C100") ' 並べ替えたい全体の範囲を指定
.Header = xlYes ' 1行目は見出し(タイトル)だよ、という合図
.MatchCase = False ' 大文字と小文字を区別するか(基本はFalseでOK)
.Orientation = xlTopToBottom ' 上から下方向へ並べ替える
.Apply ' ここで初めて実行されます
End With
MsgBox "並べ替えが終わりました!"
End Sub
覚えておきたい「3つのポイント」
- 「SortFields.Clear」による初期化の徹底
VBAの並べ替えは、前回実行した際の設定が保持されやすい性質があります。これがないと、前回の並べ替えルールと混ざって「あれ?思った通りにならないぞ?」というパニックの原因になります。 - 「Header:=xlYes」による見出し行の保護
これを忘れると、1行目の「部署名」などのタイトルまでデータの一部として判定され、並べ替えによって下方に埋もれてしまいます。 - 条件(キー)は必要に応じて何個でも追加可能
「SortFields.Add」の記述を下に書き足していくだけで、3つ、4つと条件をいくらでも増やすことができます。「部署」→「役職」→「売上」→「氏名」といった細かい指定も自由自在です。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント