スポンサーリンク

【VBA】並び替え(Sort)の制限と注意点:SortFieldsの上限は64列まで

Excel VBAでデータを並び替える際に使用する SortFields には、上限が64列まで という制約があります。
大量のデータを扱う場合、この制約を理解していないと「思った通りにソートできない」「エラーになる」といったトラブルにつながります。

ここでは、SortFieldsの上限仕様と回避方法についてわかりやすく解説します。


スポンサーリンク

1. SortFieldsの上限は64列まで

基本構文のおさらい

複数列で並び替えを行う場合は、以下のように SortFields.Add を繰り返し使います。

Sub 複数列の並び替え()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    With ws.Sort
        .SortFields.Clear
        
        '第1キー:A列昇順
        .SortFields.Add Key:=ws.Range("A2:A100"), Order:=xlAscending
        
        '第2キー:B列昇順
        .SortFields.Add Key:=ws.Range("B2:B100"), Order:=xlAscending
        
        '第3キー:C列降順
        .SortFields.Add Key:=ws.Range("C2:C100"), Order:=xlDescending
        
        '並び替え対象範囲を指定
        .SetRange ws.Range("A1:C100")
        .Header = xlYes
        .Apply
    End With
End Sub

上記のように列を追加していくことで「第1キー → 第2キー → 第3キー…」の優先順位で並び替えられます。


制限:最大64列まで

  • SortFields に追加できるキーは 最大64列まで
  • 65列目以降を追加しようとすると、エラーは出ない場合もありますが、無視されて適用されない ことがあります

つまり、Excel VBAでは「65列以上の条件での並び替えはできない」と理解しておく必要があります。


実務での影響

  • 数百列にわたる大規模なデータ(BIツールからのエクスポートや統計データなど)を扱う場合
  • 多段階の優先順位でソートを設計している場合

→ 「なぜか並び替えが思い通りに効かない」といった問題が起こりやすくなります。


スポンサーリンク

2. 制約を回避する方法

方法①:優先順位を見直す

本当に64列も必要かを考えるのが第一歩です。
多くの場合、「主要な3〜5列」だけで十分に意味のある並び替えができます。

方法②:複数回に分けてソートする

どうしても多くの列で整列したい場合は、ソート処理を複数回に分けて実行します。

例:まず前半の列でソート → その後に後半の列で再度ソート

Sub ソートを複数回に分ける()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    '最初の32列でソート
    With ws.Sort
        .SortFields.Clear
        'ここで32列分のSortFields.Addを追加
        .SetRange ws.Range("A1:AH100")
        .Header = xlYes
        .Apply
    End With
    
    '次の32列でソート
    With ws.Sort
        .SortFields.Clear
        'ここでさらに32列分のSortFields.Addを追加
        .SetRange ws.Range("A1:AH100")
        .Header = xlYes
        .Apply
    End With
End Sub

このように分割して行えば、64列以上の並び替えが必要なケースにも対応できます。

方法③:数式やヘルパー列を使う

複数列の並び替え条件を 補助列(ヘルパー列)にまとめる のも実務では有効です。
例えば「部署+担当者+日付」を1列に結合して、その列をソートキーにすれば処理をシンプルにできます。


スポンサーリンク

3. まとめ

  • SortFieldsには最大64列までの制限がある
  • 65列目以降は無視されるため、思い通りの並び替えにならない
  • 解決策は
    • 優先順位を絞る
    • 複数回に分けてソートする
    • ヘルパー列を使って条件をまとめる

👉 大規模データを扱う場合、この制限を知っておくとトラブルを防げます。

コメント

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