SortCell|指定セル範囲を簡単に並び替える | Excel VBA
- yuji fukami
- 1月6日
- 読了時間: 3分

<概要 VBAでセル範囲を並び替え>
SortCellは、指定したセル範囲に対して、任意の列をキーとして昇順・降順の並び替えを行うための汎用プロシージャです。
Excel VBAでセル範囲の並び替え処理を実装する場合、Sortオブジェクトの設定やヘッダー行の有無判定など、記述量が多くなりがちです。
このプロシージャを使用することで、並び替えに必要な処理を1行の呼び出しに集約でき、可読性と再利用性を大きく向上させることができます。
特に、先頭行をヘッダーとして除外するかどうかを引数で切り替えられる点が特徴で、実務で頻出する一覧表データの並び替え処理に適しています。
Excel VBAでのセル並び替え処理を簡潔に記述したい場合に有効なプロシージャです。
<実行例>
実行例のサンプルコードは次の通りです
この実行サンプルでは、SortCellの動作を「ヘッダーを含む範囲」「ヘッダーを含まない範囲」の2パターンに分け、さらにそれぞれを「昇順/降順」で並び替えることで、合計4通りの挙動を確認できます。並び替えキーはいずれも KeyCol:=2 を指定しているため、対象範囲内の**2列目(列C)**を基準に並び替えが行われます。
パターン1:昇順 + ヘッダーを含むセル範囲(B2:D7)
先頭行(B2:D2)をヘッダーとして含めた範囲を指定し、ExceptFirstRow:=True によりヘッダー行を固定したまま、データ行のみが昇順で並び替えられます。実務で最も一般的な「見出し行付きの一覧表」を安全に並び替える想定の結果になります。

パターン2:降順 + ヘッダーを含むセル範囲(B2:D7)
パターン1と同じくヘッダー行を含む範囲を指定し、ExceptFirstRow:=True により見出し行を固定したまま、データ行のみが降順で並び替えられます。パターン1との違いは Order のみで、並び順が逆になることを確認できます。

パターン3:昇順 + ヘッダーを含まないセル範囲(B3:D7)
ヘッダー行を範囲に含めず、データ部のみ(B3:D7)を対象にして並び替えを実行します。ExceptFirstRow:=False のため、範囲全体がデータとして扱われ、指定範囲内の行が昇順で並び替えられます。「最初からデータ範囲だけを指定して並び替える」運用を想定した結果になります。

パターン4:降順 + ヘッダーを含まないセル範囲(B3:D7)
パターン3と同様にデータ部のみ(B3:D7)を対象にして、今度は降順で並び替えを行います。ヘッダー行が範囲外にあるため、見出しが動く心配がなく、純粋にデータ行だけが降順に並び替わることを確認できます。

<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。



