初心者でも3分でわかる!VBAのSort(並べ替え)で複数条件を指定する一番シンプルな書き方

【業務効率化】VBA
スポンサーリンク

「まずは『部署名』、次に『入社年』、最後は『氏名』の順に並べ替えて……。これをあと50シート分も繰り返すなんて大変だな……」

そんな経験はありませんか?もちろん私自身も経験あります(笑)。

当時は「並べ替えくらい手でやったほうが早い」なんて意地を張っていましたが、選択範囲が漏れてデータの整合性が失われるという痛い失敗も経験しました。

しかし、Excel VBAの「Sortオブジェクト」を活用すれば、こうした実務のミスを完全に防ぐことができます。

ボタンを一度クリックするだけで、何百行ものデータが瞬時に並び替わります。毎日5分を費やしていた作業が自動化されれば、年間で約20時間もの貴重な時間を創出できる計算になります。

【業務効率化】VBAの記事を見る 

そもそも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つのポイント」

  1. 「SortFields.Clear」による初期化の徹底
    VBAの並べ替えは、前回実行した際の設定が保持されやすい性質があります。これがないと、前回の並べ替えルールと混ざって「あれ?思った通りにならないぞ?」というパニックの原因になります。
  2. 「Header:=xlYes」による見出し行の保護
    これを忘れると、1行目の「部署名」などのタイトルまでデータの一部として判定され、並べ替えによって下方に埋もれてしまいます。
  3. 条件(キー)は必要に応じて何個でも追加可能
    「SortFields.Add」の記述を下に書き足していくだけで、3つ、4つと条件をいくらでも増やすことができます。「部署」→「役職」→「売上」→「氏名」といった細かい指定も自由自在です。

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました