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