スポンサーリンク

Key4は使えないけど並べ替えをVBAコードでやる方法

vba並べ替えkey4Excel-VBA

エクセルVBAを使ってデータの並べ替えを行うのにSortメソッドを使うのですが、4つ目の条件までの並べ替えををVBAコードを使ってやってみたら、エラーになった経験ありませんか?

並べ替えのSortメソッドの標準機能が3つ目までなのですが、あきらめずに工夫をすれば4つ目以降も並べ替えができるようになりました。

スポンサーリンク

1回でできないなら2回に分ける

下の図はサッカーっぽい成績表なのですが、順位を決めるのに勝ち点を最優先にしますが、同点の場合更に3つの条件により順位を決定しています。

key4並べ替え

そうなると優先順位は4項目、Key4が必要になりましたがKey4は使えないので、2回に並び替えを分けます。

順位決定はこのようにしています。

  1. 勝ち点が多いチーム順(D列)
  2. 勝ち点が同点の場合に得失点差の多いチーム順(E列)
  3. 総得点の多いチーム順(F列)
  4. 総失点の少ないチーム順(G列)
波乗りアヒル
波乗りアヒル

まず始めに優先順位4番目(総失点の少ない順)を並べ替えます。

VBAコードはいつものようにユーザーフォームを使う実例です。

見出し

Private Sub CommandButton1_Click()
Range(“B2:G23”).Sort Key1:=Range(“G3”), Order1:=xlAscending
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. 表の範囲のセルB2~G23をG3の列で小さい順(昇順)で並べ替える
  3. マクロ記録終了
波乗りアヒル
波乗りアヒル

この状態で次に優先項目1~3を並べ替えれば、2回に分けて並べ替えたおかげで4項目順に並べ替えることができます。

VBAコード

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もくじへ

コメント