エクセルVBAを使ってデータの並べ替えを行うのにSortメソッドを使うのですが、4つ目の条件までの並べ替えををVBAコードを使ってやってみたら、エラーになった経験ありませんか?
並べ替えのSortメソッドの標準機能が3つ目までなのですが、あきらめずに工夫をすれば4つ目以降も並べ替えができるようになりました。
1回でできないなら2回に分ける
下の図はサッカーっぽい成績表なのですが、順位を決めるのに勝ち点を最優先にしますが、同点の場合更に3つの条件により順位を決定しています。
そうなると優先順位は4項目、Key4が必要になりましたがKey4は使えないので、2回に並び替えを分けます。
順位決定はこのようにしています。
- 勝ち点が多いチーム順(D列)
- 勝ち点が同点の場合に得失点差の多いチーム順(E列)
- 総得点の多いチーム順(F列)
- 総失点の少ないチーム順(G列)
まず始めに優先順位4番目(総失点の少ない順)を並べ替えます。
VBAコードはいつものようにユーザーフォームを使う実例です。
Private Sub CommandButton1_Click()
Range(“B2:G23”).Sort Key1:=Range(“G3”), Order1:=xlAscending
End Sub
- コマンドボタン1がクリックされたら
- 表の範囲のセルB2~G23をG3の列で小さい順(昇順)で並べ替える
- マクロ記録終了
この状態で次に優先項目1~3を並べ替えれば、2回に分けて並べ替えたおかげで4項目順に並べ替えることができます。
Private Sub CommandButton1_Click()
Range(“B2:G23”).Sort Key1:=Range(“G3”), Order1:=xlAscending
Range(“B2:G23”).Sort Key1:=Range(“D3”), Order1:=xlDescending, Key2:=Range(“E3”), Order2:=xlDescending, Key3:=Range(“F3”), Order3:=xlDescending
End Sub
これが2回に分けた並べ替えのVBAコードの完成版です。

Excel-VBAを使えば数分かかる作業がたったの1秒で終了しますよ!