空手の形の試合の得点計算 ~ダミーデータ作成~
先日長男が、他県某市で空手の試合に出場した。
形の試合(決勝)では、採点方式で優劣が競われた。
- 主審1名と副審4名が採点する。
- 一人の持ち点は7.0点。そこから0.1点単位で、加点または減点する。
- 5名のうち、最高点と最低点を除く3名の合計点の大小で勝敗を決める。
- 上記に於いて同点の場合、合計点に最低点を加えて比較する。
- それでも勝敗が決まらない場合、最高点を加えて比較する。
私も数回試合の補助員になったことがあるが、この計算は私が見た限り、その場で手計算で行われることが多い。そこで、点数を入力するだけで自動的に順位を算出するExcelファイルの作成を試みた。
(※2018年11月現在、それ専用のアプリは既にあるようです)。
まずは、何をするにも計算確認用のサンプルが必要だ。
一つずつ手入力するのも面倒なので、まずはダミーデータを作成するマクロを作成した。今回の作戦はこうだ。
- ランダムに点数を入力する、ユーザー定義関数を作成する。
- 同関数の引数は、以下の3つとする。
・処理範囲
・得点の最大値
・得点の最小値 - ランダムな点数は、RND関数を用いて作成する。
実際のコードがこちら。
標準モジュール
Sub MakeTestData(myRng As Range, iMax As Double, iMin As Double) Dim r As Range For Each r In myRng r = Format((iMax - iMin) * Rnd + iMin, "0.0") Next myRng.NumberFormatLocal = "0.0" End Sub
RND関数は、0以上1未満の数値をランダムに作成する。従って、
最小値+(最大値と最小値の差)× 0以上1未満のランダムな数値
としておけば、
- RND=0 ⇒ 最小値+(最大値-最小値)×0=最小値
- RND≒1 ⇒ 最小値+(最大値-最小値)×0.999…≒最大値
となる。
最後に、このユーザー定義関数に引数を与えるマクロを作成する。
Sub TEST() MakeTestData myRng:=Selection, _ iMax:=7.4, _ iMin:=6.8 End Sub
なお今回の最大値と最小値は、異常値が頻出しないよう、試合でよく見かける点数とした。
結果は、↓ このとおり。
とりあえず今日は、下ごしらえ。明日に続きます。
参考まで。