成績表一覧から上位3位の点数と該当する名前を欄外に書き出す方法
エクセルで作っているボウリング成績表はポイント順に並べ替えていますが、ハイゲーム(1ゲーム最高得点)やハイシリーズ(3ゲーム合計得点)はバラバラに並んでいるので、上位3名を探すのはとても面倒で大変なので、何か簡単な方法がないか?と探していますよね。
西船ボウルのリーグ戦でもポイント順に成績表は並べ替えるので、目で見て点数と名前を一瞬で上位3名を見つけるなんてことはできませんので、エクセルVBAを使って自動化しています。
- VBA関数「WorksheetFunction」
- 検索「Find」
- LARGE関数
ボタンを配置してVBAコードを登録するだけで、コマンドボタンを1クリックで一瞬でハイゲームを見つけ出してくれるので、あっという間にスタンディングが終わりますよ。
トップ3の点数と該当者を見つけて書き出す
上の図のように、ボウリング成績表でサンプルの為少ない人数にしていますが3ゲームのスコアーと最高得点(HG)を表示していて、参加者個々の最高点(HG)の欄などは高得点順には並んでいません。
次のようにエクセルVBAコードを書くと、自動的に成績表の中からトップ3の点数を探して、見つけたら点数と該当者の名前を表の外に書き出します。
VBAコード
Sub 上位3名()
A = WorksheetFunction.Max(Range(“G2:G8”))
B = WorksheetFunction.Large(Range(“G2:G8”), 2)
C = WorksheetFunction.Large(Range(“G2:G8”), 3)
Dim i As Range
Set i = Range(“G2:G8”).Find(What:=A, LookIn:=xlValues)
i.Select
Range(“B16”).Value = i
Range(“A16”).Value = ActiveCell.Offset(0, -6).Value
Set i = Range(“G2:G8”).Find(What:=B, LookIn:=xlValues)
i.Select
Range(“B17”).Value = i
Range(“A17”).Value = ActiveCell.Offset(0, -6).Value
Set i = Range(“G2:G8”).Find(What:=C, LookIn:=xlValues)
i.Select
Range(“B18”).Value = i
Range(“A18”).Value = ActiveCell.Offset(0, -6).Value
End Sub
解説
では1行目から解説じゃ
- 「上位3名」というタイトルでマクロ宣言
- 値「A」は、セルG2~G8の範囲内の最大数字を格納
- 値「B」は、セルG2~G8の範囲内の2番目に大きい数字を格納
- 値「C」は、セルG2~G8の範囲内の3番目に大きい数字を格納
- 変数「i」Dimで宣言
- 「i」はセルG2~G8の範囲内で、格納値「A」があるセル番地を指定する
- 指定したセル番地「i」を選択する
- セルB16に「i」の値を入力する
- セルA16に選択中のセルから左へ6列目のセルの値を入力する
- 「i」はセルG2~G8の範囲内で、格納値「B」があるセル番地を指定する
- 指定したセル番地「i」を選択する
- セルB17に「i」の値を入力する
- セルA17に選択中のセルから左へ6列目のセルの値を入力する
- 「i」はセルG2~G8の範囲内で、格納値「C」があるセル番地を指定する
- 指定したセル番地「i」を選択する
- セルB18に「i」の値を入力する
- セルA18に選択中のセルから左へ6列目のセルの値を入力する
- マクロ記録終了
ポイントは、エクセル関数で最大値を見つける「MAX関数」を第1位に、2番目と3番目に大きい値を見つけるのは「LARGE関数」で、ワークシート上で数式を使うことです。
そして、第1位を「A」、第2位を「B」、第3位を「C」で格納して、それぞれ順番に探して見つけたら書き出すという作業を3回繰り返しています。
最大値を探す「MAX関数」や2番目や3番目などを探す「LARGE関数」をそれぞれVBAコードで扱う方法については、重複するのでここでは省略しますが、確認したい方はご覧くださいませ。
ただし、表の中に同じ数字があった場合には、行が上のほうが優先されるんじゃ~
ボウリング成績表で必須のVBAコード
エクセルのボタンの配置方法やリボンツールバーの「開発」設定がまだの場合、この機能使えないので設定から始めましょう~
西船ボウルで使用しているエクセルで作っているリーグ成績表(スタンディング)で、必ず使っているVBAコードです。
実際にはワークシート上にコマンドボタンを配置せず、専用の入力フォームも(ユーザーフォーム)作成してフォーム上にボタンなどを配置しています。
成績表作成でよく使う便利機能
エクセルファイル操作の便利機能