スポンサーリンク

【VBA】フィルタ・並び替え(ソート)の制限と注意点:Sort対象に空白行が含まれる場合の挙動

Excelで並び替え(Sort)を行う際、意外とつまずきやすいのが「データ範囲に空白行が含まれているケース」です。実務でも、入力ミスやデータ整理の段階で空白行が混ざってしまうことはよくあります。その場合、VBAでSortを実行すると想定外の結果になることがあります。ここでは 空白行が含まれる場合の挙動と対処法 を詳しく解説します。


スポンサーリンク

1. Sort対象に空白行が含まれる場合の挙動

Excelの自動判定による「データ範囲の分断」

Excelは並び替えを行う際に、「連続しているセル範囲」をひとまとまりのデータとして認識します。
そのため、 空白行が途中にあると、データがそこで分断されたとみなされる ため、並び替えが意図通りに動作しないことがあります。

例)下記のようなデータを想定します。

ID名前得点
1田中80
2鈴木70
3佐藤90
4高橋60

この場合、Excelは「ID=1~2の範囲」と「ID=3~4の範囲」を別々のテーブルと認識します。その結果、ソートをかけても「全体をまとめて並べ替え」するのではなく、分断された範囲ごとに並び替えが行われます。


並び替え時の典型的なトラブル

  • 一部しか並び替えられない
    → データの途中で止まってしまい、残りの行がそのままになる。
  • ヘッダー行も並び替え対象に含まれる
    → 範囲が正しく認識されず、タイトル行がデータと混ざる。
  • フィルタの設定範囲とずれる
    → AutoFilterを併用している場合、空白行があると絞り込みの対象が一部に限定される。

スポンサーリンク

2. 対処法

空白行を含む場合に正しく並び替えを行うには、以下の方法があります。

(1) 並び替え範囲を明示的に指定する

VBAで Set rng = ws.Range("A1:C100") のように 並び替え対象の範囲を明示的に指定 することで、空白行があっても全体を並び替えられます。

(2) CurrentRegionを過信しない

Range("A1").CurrentRegion を使うと、空白行で途切れた範囲しか取得できません。
そのため、 空白行が存在する可能性がある場合は、CurrentRegionは避けるか、データ範囲を正しく計算して指定する ことが重要です。

(3) 空白行を事前に削除・詰める

根本的な対策としては、並び替え前に空白行を削除する、または SpecialCells(xlCellTypeBlanks) を使ってデータを上に詰める方法があります。


スポンサーリンク

3. 実務での注意点

  • データを渡される際、無意識に空白行が混ざっているケースが多い
  • VBAで自動処理を組むなら、 「範囲を指定する」or「空白行を削除する」処理をセットで書くのが安全
  • フィルタとソートを組み合わせる場合は特に、空白行の存在が原因で「絞り込み範囲」と「並び替え範囲」がずれることが多い

スポンサーリンク

4. まとめ

  • 空白行があると、Excelはデータ範囲を分断して認識するため、意図通りにソートできない。
  • VBAでは範囲を 明示的に指定する ことが最も確実。
  • 可能であれば、並び替え前に 空白行を削除・詰める処理 を組み込むと、トラブルを未然に防げる。

コメント

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