Key4は使えないけど4つ以上項目の並べ替えをVBAコードでやる方法

エクセル検索
HOMEUserForm印刷画面ファイル図形
日付・時刻データセル関数VBA関数

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

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

Sortメソッドを2回に分けて使う

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

key4-1
key4-1

順位決定するには「勝ち点」「得失点差」「総得点」「総失点」の順に決定するのでSortメソッドでは3項目なので足りません。

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

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

並べ替え手順①

まず始めに優先順位4番目(総失点の少ない順)を並べ替えますので、VBAコードはいつものようにユーザーフォームを使う実例です。

並べ替え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

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

これが2回に分けた並べ替えのVBAコードの完成版で、ちょっとの工夫で4つの並べ替えができました。

関連記事

どこかにビューーン
ちょっとの工夫で往復無料の時代が来た!!

新着ページ

よく見られているページ

大容量無料ファイル転送サービス【ACデータ】 無料イラスト【イラストAC】

紅葉スポット

2024年5月11日からマイルと楽天ポイントとの相互交換提携開始!

交換レート0.5:1なので半分になってしまいますが、使い方次第で実質3倍の価値まで引き上げられる方法です。