【2026年7月最新】VBAのSortメソッド完全ガイド|Range.Sort・Sortオブジェクト・複数キー・昇順降順・配列ソートまで徹底解説

【2026年7月最新】VBAのSortメソッド完全ガイド|Range.Sort・Sortオブジェクト・複数キー・昇順降順・配列ソートまで徹底解説

この記事の内容

  1. 01VBAのSortとは――ExcelをコードでソートするメリットとSort方式2種
  2. 02Range.Sortメソッドの基本構文とパラメータ一覧
  3. 03昇順・降順・複数キーでのソート実践
  4. 04Sortオブジェクトを使った高度なソート
  5. 05配列データをVBAでソートする方法
  6. 06日付データのソートと日本語列名の扱い

    3-5. 日付データのソートと日本語列名の扱い

    日付データが入った列をSortする場合、Excelが日付をシリアル値(数値)として管理しているため、値渡しのSort処理は基本的に問題なく機能します。ただし日付の表示形式(yyyy/mm/dd、mm/dd/yyyyなど)が混在していると文字列として扱われる場合があります。

    Sub SortByDate() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Sheets("売上記録") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'C列(日付)を昇順(古い順)でソート ws.Range("A1:E" & lastRow).Sort _ Key1:=ws.Range("C1"), _ Order1:=xlAscending, _ Header:=xlYes '日付が文字列として入力されている場合はCDate()で変換してから再入力 MsgBox "日付順ソート完了" End Sub
    💡日本語ヘッダー名でSortキーを指定する方法

    列名(ヘッダー)が「売上金額」のような日本語の場合、ヘッダー行のセルをFindメソッドで検索して列番号を取得するのが安全です。「ws.Rows(1).Find("売上金額").Column」でA=1、B=2のような列インデックスを取得でき、「ws.Cells(1, colIndex)」でRange型のキーを作れます。列の順番が変わってもコードの修正が不要になります。

    📌 この記事の結論
    【2026年7月最新】VBAのSortメソッド完全ガイド|Range.Sort・Sortオブジェクト・複数キー・昇順降順・配列ソートまで徹底解説
    VBAのSortメソッドを完全解説。Range.Sort基本構文・複数キー指定・Sortオブジェクト・昇順降順・ヘッダー設定・配列ソート・Claude Codeで自動生成まで、コード例付きで非エンジニア向けに解説。

    ソートでよくあるエラーと対処法

  7. 07Claude CodeでVBAソートコードを自動生成する
  8. FAQよくある質問

「毎日Excelのデータを手動で並び替えている」「複数の列を条件にソートしたい」「月次レポートのたびに並び替えが必要で面倒」——VBAのSortを使えば、こうした繰り返し作業をボタン1つで自動化できます。

VBAのRange.Sortメソッドは、ExcelのセルデータをVBAコードで自動的に並び替えるための機能です。手動のソート操作と比べて「繰り返し実行できる」「複数のシートやブックを一括処理できる」「他の処理と連携できる」というメリットがあります。

この記事では、VBAのSortメソッドの基本構文から、昇順・降順・複数キー指定、Sortオブジェクトを使った高度なソート、配列データの並び替えまでコピーしてすぐ使えるコード例付きで解説します。

代表菅澤 代表菅澤
Excelのデータ集計業務で「毎月末にデータを並び替えてからレポートを作る」という作業は、VBAのSortで自動化できる典型例です。Sort処理をマクロに組み込めば、並び替え→集計→シートコピーまでを一連の操作として自動化でき、手作業ミスも防げます。
AI鬼管理山崎 AI鬼管理山崎
VBAのSortには「Range.Sort」と「Sortオブジェクト」の2方式があります。Range.Sortは簡潔に書けますが最大3キーまで、Sortオブジェクトは複数条件・セル色でのソートにも対応します。用途に合わせて使い分けましょう。
✔️VBAのSortメソッドの基本構文とパラメータの意味が分かる
✔️昇順・降順の設定方法とxlAscending/xlDescendingの使い方が分かる
✔️複数キー(Key1/Key2/Key3)によるソートができるようになる
✔️Sortオブジェクトを使ったExcel 2007以降の高度なソートが分かる
✔️配列データをVBAでソートする方法が分かる
✔️ヘッダー行の扱いなど実務でよくある問題を解決できる
✔️Claude CodeでVBAのソートコードを自動生成・修正する方法が分かる

01 VBAのSortとは――ExcelをコードでソートするメリットとSort方式2種 手動ソートとVBAソートの違いと2つのAPI方式を理解する

ExcelのVBAでデータを並び替えるには2つの方法があります。1つはRange.Sortメソッド(古くからある方法・最大3キー)、もう1つはSortオブジェクト(Excel 2007以降・無制限のキー数・セル色ソート対応)です。

比較項目Range.Sort(旧来型)Sortオブジェクト(新型)
対応バージョンすべてのExcel VBAExcel 2007以降
最大ソートキー数3キーまで(Key1〜Key3)制限なし
コードの簡潔さ1行で書ける複数行が必要
セル色でのソート不可可能
用途シンプルな並び替え複雑な条件・色分けがある場合

📚 用語解説

Sort(ソート):データを特定の順序(昇順・降順)に並び替える処理。VBAでは「Range.Sort」メソッドまたは「Sortオブジェクト」を使ってExcelのセル範囲を自動的に並び替えます。「昇順(Ascending)」は小さい値から大きい値へ、「降順(Descending)」は大きい値から小さい値への並び順です。

手動でExcelのソート(データ→並び替え)を操作する方法と、VBAで自動化する方法の違いを理解しておきましょう。

比較項目手動ソートVBAソート(自動化)
実行方法Excelメニュー操作マクロ実行(ボタン・スケジューラ)
繰り返し毎回手動操作が必要1回コードを書けば何度でも実行可
複数シート1シートずつ操作全シートを一括処理可
他の処理との連携単独操作Sort後に集計・コピー等と連続実行
ミスリスク操作ミスの可能性あり毎回同じ条件で正確に実行

02 Range.Sortメソッドの基本構文とパラメータ一覧 各パラメータの意味と省略した場合のデフォルト値を理解する

Range.Sortメソッドの基本構文と全パラメータを確認します。多くのパラメータは省略可能で、よく使うのはKey1・Order1・Headerの3つです。

📚 用語解説

Range.Sort:Excel VBAでセル範囲のデータを並び替えるメソッド。「Range("範囲").Sort Key1:=Range("列"), Order1:=xlAscending, Header:=xlYes」の形式で呼び出します。Key1〜Key3で最大3つのソートキー(並び替え基準の列)を指定できます。

'Range.Sortメソッドの基本構文 Range("A1:D100").Sort _ Key1:=Range("A1"), '第1ソートキー(必須) Order1:=xlAscending, '昇順(xlDescendingで降順) Key2:=Range("B1"), '第2ソートキー(省略可) Order2:=xlDescending, '第2キーの並び順 Header:=xlYes, '先頭行をヘッダーとして扱う MatchCase:=False, '大文字小文字を区別しない Orientation:=xlTopToBottom '行方向にソート(デフォルト)
パラメータ型・値デフォルト説明
Key1〜Key3Range型(省略不可)ソートの基準となる列のセル(例:Range("A1"))
Order1〜Order3xlAscending / xlDescendingxlAscending(昇順)昇順か降順かを指定
HeaderxlYes / xlNo / xlGuessxlGuess(自動判定)先頭行がヘッダーかデータかを明示
MatchCaseTrue / FalseFalse(区別しない)大文字小文字を区別するか
OrientationxlTopToBottom / xlLeftToRightxlTopToBottom(行方向)縦(行)方向か横(列)方向かのソート
SortMethodxlPinYin / xlStrokexlPinYin日本語文字の並び順(読み/画数)
⚠️Headerは必ずxlYesかxlNoで明示する

Header:=xlGuess(デフォルト)では、Excelが先頭行をヘッダーかデータかを自動判定しますが、数値データが先頭にある場合などで誤判定されることがあります。実務では必ず「Header:=xlYes」または「Header:=xlNo」を明示して予期しない動作を防いでください。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

03 昇順・降順・複数キーでのソート実践 よく使うソートパターンをコピーして使えるコード集

3-1. 基本の昇順ソート

Sub SortAscending() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("データ") 'A列(名前)を昇順でソート ws.Range("A1:D100").Sort _ Key1:=ws.Range("A1"), _ Order1:=xlAscending, _ Header:=xlYes MsgBox "ソート完了" End Sub

3-2. 降順ソート

Sub SortDescending() 'B列(売上)を降順でソート(大きい順) ThisWorkbook.Sheets("売上").Range("A1:D50").Sort _ Key1:=Range("B1"), _ Order1:=xlDescending, _ Header:=xlYes End Sub

3-3. 複数キーでのソート

複数の列を条件にソートするには、Key1・Key2・Key3を指定します。Key1が優先度最高で、Key1が同じ値の行はKey2でソートされます。

Sub SortMultipleKeys() 'A列(部署)昇順 → B列(役職)昇順 → C列(年齢)降順 With ThisWorkbook.Sheets("社員") .Range("A1:E100").Sort _ Key1:=.Range("A1"), Order1:=xlAscending, _ Key2:=.Range("B1"), Order2:=xlAscending, _ Key3:=.Range("C1"), Order3:=xlDescending, _ Header:=xlYes End With MsgBox "3キーソート完了" End Sub

3-4. 最終行を自動取得してソート範囲を動的に設定する

データ件数が変動する表では、最終行を動的に取得してソート範囲を自動調整するのが実務の基本です。

Sub SortDynamic() Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Sheets("データ") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'データが2行以上ある場合のみソート実行 If lastRow >= 2 Then ws.Range("A1:D" & lastRow).Sort _ Key1:=ws.Range("A1"), _ Order1:=xlAscending, _ Header:=xlYes MsgBox "ソート完了(" & lastRow - 1 & "行)" Else MsgBox "ソート対象データがありません" End If End Sub
💡データ範囲の最終行を取得するコード

「ws.Cells(ws.Rows.Count, "A").End(xlUp).Row」はA列の最終行番号を取得するVBAの定番コードです。Ctrl+↑を押してA列の最後のデータ行に移動するイメージです。この方法でデータ件数が変わっても常に正しい範囲を指定できます。

04 Sortオブジェクトを使った高度なソート セル色ソート・複数条件・Excel 2007以降の新しいSort API

Excel 2007以降では、Sortオブジェクトを使ったより高度なソートが可能です。SortFields.Addでソート条件を追加し、Applyで実行するという3ステップの構成です。

📚 用語解説

SortFields(ソートフィールズ):Excel 2007以降で追加されたSortオブジェクトのコレクション。「ws.Sort.SortFields.Add Key:=列, SortOn:=xlSortOnValues, Order:=xlAscending」の形式でソート条件を追加します。xlSortOnCellColorやxlSortOnFontColorを指定するとセルの色・文字色でソートできます。

SortFields.Clear
前回の条件をクリア
SortFields.Add
ソート条件を追加
SetRange
対象範囲を設定
Header設定
ヘッダー行の扱い
Apply
ソート実行
Sub SortWithObject() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("データ") 'Sortオブジェクトのソート条件をクリア ws.Sort.SortFields.Clear '第1ソートキー: A列を昇順 ws.Sort.SortFields.Add _ Key:=ws.Range("A1"), _ SortOn:=xlSortOnValues, _ Order:=xlAscending '第2ソートキー: B列を降順 ws.Sort.SortFields.Add _ Key:=ws.Range("B1"), _ SortOn:=xlSortOnValues, _ Order:=xlDescending 'ソート対象範囲とヘッダー設定を適用して実行 With ws.Sort .SetRange ws.Range("A1:D100") .Header = xlYes .Apply End With End Sub

4-2. セルの色でソートする

Sub SortByColor() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("データ") ws.Sort.SortFields.Clear 'A列のセル色でソート(赤色を先頭に) ws.Sort.SortFields.Add _ Key:=ws.Range("A2"), _ SortOn:=xlSortOnCellColor, _ Order:=xlAscending, _ DataOption:=xlSortNormal ws.Sort.SortFields(1).SortOnValue.Color = RGB(255, 0, 0) '赤色を先頭 With ws.Sort .SetRange ws.Range("A1:D100") .Header = xlYes .Apply End With End Sub

05 配列データをVBAでソートする方法 バブルソートと一時セル利用の2パターン

VBAには配列を直接ソートするための組み込み関数がありません。配列をソートするには①一時的にセルに書き出してRange.Sortを使う方法②バブルソートなどのアルゴリズムを自前実装する方法があります。

📚 用語解説

バブルソート(Bubble Sort):隣り合う要素を比較して大小を入れ替えることを繰り返すシンプルなソートアルゴリズム。小さなデータ(100件以下程度)には実用的ですが、データ量が増えると処理時間が急増する(計算量O(n²))ため、大量データには向きません。VBAでは簡単に実装できるため、少数の配列ソートに使われます。

'バブルソートで数値配列を昇順に並び替え Sub BubbleSortArray() Dim arr() As Long Dim i As Long, j As Long, tmp As Long Dim n As Long arr = Array(45, 12, 87, 3, 66, 28) n = UBound(arr) For i = 0 To n - 1 For j = 0 To n - i - 1 If arr(j) > arr(j + 1) Then tmp = arr(j) arr(j) = arr(j + 1) arr(j + 1) = tmp End If Next j Next i '結果確認 MsgBox Join(arr, ", ") '3, 12, 28, 45, 66, 87 End Sub

5-2. セルを利用した配列ソート(大量データ向け)

Sub SortArrayViaCell() Dim arr As Variant Dim ws As Worksheet arr = Array(45, 12, 87, 3, 66) '一時シートに書き出してソート Set ws = ThisWorkbook.Sheets("Sheet1") ws.Range("Z1:Z5").Value = Application.Transpose(arr) ws.Range("Z1:Z5").Sort Key1:=ws.Range("Z1"), Order1:=xlAscending, Header:=xlNo 'ソート結果を配列に読み戻す arr = Application.Transpose(ws.Range("Z1:Z5").Value) '作業セルをクリア ws.Range("Z1:Z5").ClearContents MsgBox Join(arr, ", ") End Sub
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

06 ソートでよくあるエラーと対処法 ヘッダー誤認識・範囲ミス・型不一致の解決方法

📚 用語解説

xlGuess(エックスエル・ゲス):Range.SortメソッドのHeaderパラメータのデフォルト値。ExcelがデータからヘッダーかどうかをAIで自動判断します。ただし判定が外れることがあるため、実務では「xlYes(先頭行はヘッダー)」または「xlNo(ヘッダーなし・全行データ)」を明示することを推奨します。

エラー・問題原因対処法
ヘッダー行もソートされてしまうHeader:=xlGuessの自動判定ミスHeader:=xlYesを明示する
ソートが一部の列にしか適用されないソート範囲の指定ミス(全列を含めていない)A1:D100のように全列を含む範囲を指定
数値が文字列扱いでソートされるセルの書式設定が「文字列」になっているセル書式を「数値」に変更してからソート
Key1の列がソート範囲外Keyに指定した列がRangeの外KeyのRangeがSort対象Rangeの内側にあることを確認
エラー1004: アプリケーション定義のエラーシート保護が有効になっているSort前にActiveSheet.Unprotectでシート保護を解除
⚠️数値が「1, 10, 2, 20, 3」のような順でソートされる場合

セルの書式が「文字列」に設定されていると、数値の「10」が文字として扱われ「10 < 2」と判定されます(辞書順では"1"が先頭)。これはセルを選択→「書式設定(Ctrl+1)」→「数値」に変更し、データを入力し直すことで解決します。VBAで対処する場合は「CDbl(cellValue)」で数値に変換してからSort処理を行います。

07 Claude CodeでVBAソートコードを自動生成する 日本語で要件を伝えるだけで実用的なSortマクロが完成

VBAのSortメソッドは構文が長く、パラメータのつづりミス(xlAcendingなどのスペルミス)が発生しやすい領域です。Claude Codeを使えば、日本語で要件を伝えるだけで実用的なSortマクロを自動生成できます。弊社(株式会社GENAI)では、社内のExcel業務自動化にClaude Codeを活用しています。

✔️「A列の名前で昇順、B列の売上で降順にソートするマクロを書いて。データは可変行数で1行目がヘッダー」
✔️「このマクロのSort範囲を固定値からLastRowを使った動的範囲に書き直して」
✔️「Sheet1からSheet5まで全てのシートを同じ条件でソートするループを書いて」
✔️「配列をバブルソートで昇順に並び替えるFunctionを書いて。汎用的にVariantで受け取って」
✔️「セルが赤色の行を先頭に持ってくるSortオブジェクトを使ったコードを書いて」

特に便利なのが「既存のマクロのバグ修正」です。VBAのソートで思った通りにソートされない原因の多くは①Header指定ミス②ソート範囲に全列が含まれていない③数値が文字列として認識されている——のどれかです。コードをClaude Codeに貼り付けて「このマクロでヘッダー行もソートされてしまう原因を修正して」と聞くと即座に修正コードが返ってきます。

弊社では、月次レポート自動化・売上データの自動整列・複数シートの一括ソートなど、繰り返し発生するExcel作業をClaude Codeで自動化しています。毎月10時間以上かかっていた手動ソート→集計作業が、マクロ実行10秒に短縮された事例もあります。

代表菅澤 代表菅澤
VBAのSortはパラメータが多く、毎回ドキュメントを確認しながら書く必要がありました。Claude Codeに「この表をA列昇順・B列降順でソートするVBAを書いて」と日本語で伝えるだけで、Header指定・動的LastRow取得・エラー処理まで含む完成度の高いコードが一発で出てきます。
✔️Range.Sortは1行で書けるシンプルなSort方法(最大3キー)
✔️Header:=xlYes/xlNoを必ず明示し、自動判定(xlGuess)を避ける
✔️複数キーはKey1/Key2/Key3で指定。Key1が最優先で同値のみKey2が適用される
✔️SortオブジェクトはSortFields.Add→SetRange→Applyの3ステップ。セル色ソートも可
✔️動的範囲はCells(Rows.Count, "A").End(xlUp).Rowで最終行を取得して指定
✔️配列のSortはバブルソート実装か一時セルへの書き出しで対応する
✔️Claude CodeでSortマクロの自動生成・デバッグ・最適化を高速化できる

ExcelのVBAソート自動化はClaude Code×AI鬼管理で効率化

毎月の並び替え・集計・レポート作成を自動化するVBAマクロをClaude Codeで生成・保守する方法を、実績を交えてご紹介します。

AI鬼管理山崎 AI鬼管理山崎
VBAのSort作業は「毎月同じことをしている」典型的な自動化対象です。Claude Codeで一度マクロを作れば、後は実行するだけ。月次レポートの工数を大幅に削減できます。無料相談でご相談ください。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. VBAのRange.SortとSortオブジェクトはどちらを使うべきですか?

A. シンプルな1〜3キーでのソートにはRange.Sort、セル色での並び替え・4キー以上・細かい制御が必要な場合はSortオブジェクトを使います。実務ではRange.Sortの方が記述が短く読みやすいため、Range.Sortで対応できるケースではRange.Sortを選ぶのが一般的です。

Q. ソートしたらヘッダー行も移動してしまいました。どう直しますか?

A. Header:=xlGuessが原因で、先頭行をデータとして誤判定したと考えられます。「Header:=xlYes」を明示してください。「Range("A1:D100").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes」とすると先頭行をヘッダーとして扱い、2行目以降のデータのみをソートします。

Q. ソートで数値の順番がおかしい(1, 10, 2, 20の順になる)場合の解決方法は?

A. セルの書式が「文字列」になっているため、数値が文字として並び替えられています(辞書順)。対処方法は①該当列を選択→ホーム→書式→「数値」に変更してデータを入力し直す②VBAで「CDbl」で数値に変換してから書き直す——のどちらかです。最もシンプルなのは、列の書式を数値に直してから再度ソートすることです。

Q. 複数のシートを同じ条件でソートするにはどうすればいいですか?

A. For Eachループでシートを繰り返し処理し、各シートに対してSortメソッドを実行します。「For Each ws In ThisWorkbook.Worksheets: ws.Range("A1:D100").Sort ...: Next ws」のような形式です。特定のシート名のみを対象にする場合はIf文でシート名を絞り込んでください。

Q. VBAで配列をソートする方法は何がありますか?

A. ①バブルソート実装(隣り合う要素を比較して入れ替えを繰り返す)②クイックソート実装(大量データに適したO(n log n)のアルゴリズム)③一時的にセルに書き出してRange.Sortを使い、結果を配列に読み戻す——の3種類が代表的です。小さな配列(100件以下)ではバブルソートが実装が簡単で実用的です。

Q. ソート実行時に「アプリケーション定義のエラー(エラー1004)」が出ます。

A. 主な原因は①シートが保護されている(ActiveSheet.Unprotectで解除)②ソート範囲が空または1行しかない③Key1で指定した列がSort対象範囲の外にある——のどれかです。まずシートの保護を確認し、次にSort範囲とKeyのセル範囲が一致しているか確認してください。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月18日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。