緊急事態宣言発令中による営業について詳細へ

ハンデキャップ(HDCP)の計算式を作ろう

EXCELVBA

それでは、一番面倒なHDCPの計算式を考えますが、リーグ戦のルールにより単純なものから複雑なもの、そして難解な計算をしなくてはいけないようなルールとたくさんのパターンがあります。

F支配人
F支配人

今回はそんなに複雑な条件がなく基本的なハンデキャップの計算式を作ってみましょう。

ボウリング教室でもハンデキャップの計算方法を話す機会がありますが、

「HDCP」=(「基準点」ー「AVE」)×「掛率」

このような計算式で、基準点が200、AVE180、掛率90%とすると、

(200-180)*0.9となりHDCPは18となりますよね。

ピンちゃん
ピンちゃん

数学は得意だからこんなの楽勝!楽勝!

ピン君
ピン君

そんな自慢気に言われても数学というより小学校低学年の算数レベルじゃないか!

目次

様々な条件をクリアするHDCP計算式

ボウリング個人カード

F支配人
F支配人

そうHDCPの部分セル「BU4」には、実際には計算式といってもこんな式が入っています。

=IF(OR($BC$2=4,$BC$2=5),0,IF(COUNT(BC4:BF4)=0,$BU$2,IF(BA4<=$AL$12,$BU$2,MIN(MAX(INT(($AL$8-INT(BO4))*$AL$9),0),$AL$7))))
ピンすけ
ピンすけ

ピピピピぴ~ん!

なんじゃこりゃ!

さっきまでのHGやHSの計算式が可愛いもんだね。

ピンねーちゃん数学得意なんだよね、解読して!

ピンちゃん
ピンちゃん

記憶にございません!

こんな計算式はムリムリ!

得意科目は国語です!

ピン君
ピン君

解説してよ!

こんな複雑な長い計算式分かるかけないでしょ!

F支配人
F支配人

BU4に入っているHDCP計算式は次の条件をクリアしています。

  • 小数点以下切り捨て
  • マイナスHDCPは全て0にする
  • HDCP上限を設定している
  • リーグ初日から〇週目までHDCP固定して△週目から変動させる
  • 未登録選手・おばけ・プロは常にHDCPは0にする
  • BL時は前回のHDCPを使う
F支配人
F支配人

今回のリーグ戦はこの6つの条件ぐらいかなあ~。

全部のリーグ戦にこの6つは入れているね。

その他の条件はリーグによって付け加えるぐらいかな

ピン君
ピン君

こんなに必要?

省略できないの?

リーグのHDCPなどのルールは下図の「個人戦リーグ設定」の部分に記載して、ココの値を参照して計算するようになっています。

例えば、基準点は個人ベースのところに180となっているので、180ベースでHDCPを算出します。

当然、190にすれば、瞬時に190ベースのHDCPに全て計算し直してくれます。

F支配人
F支配人

設定項目みたいなものですね。

ゲーム数や掛率、上限HDCPや勝敗ポイントもここで設定します。

ボウリング成績表HOME1

印刷設定と選手登録とリーグ設定

小数点切り捨て(INT関数)

リーグ戦のルールによるのですが、HDCPが小数点以下があることって経験したことがありませんので、必ず整数になるようにINT関数を使って小数点以下を切り捨てます

先ほどと同じHDCP計算式で小数点以下切り捨ての計算式は青マーカーの部分です。

=IF(OR($BC$2=4,$BC$2=5),0,IF(COUNT(BC4:BF4)=0,$BU$2,IF(BA4<=$AL$12,$BU$2,MIN(MAX(INT(($AL$8-INT(BO4))*$AL$9),0),$AL$7))))

セルAL8は「個人ベース」(基準点)、BO4は「アベレージ」、AL9は「掛率」となっています。

F支配人
F支配人

ちなみに$マークは絶対参照としてセルを固定する為に使っています。

マイナスハンデと上限ハンデを設定する

リーグ戦によってはマイナスHDCPを使う事があるかもしれませんが、あまり一般的ではないですよね。

その為にマイナスHDCPになったら「0」になるようにする為にMAX関数を使って、計算されたHDCPと0を比較して大きい数字を計算するようにします。

こうすることにより、通常のHDCPは0よりも大きいので、その結果にしてマイナスの時は0の方が大きいので0になるって事なんです。

先ほどと同じHDCP計算式でマイナスHDCPをOにする計算式は青マーカーのMAX(計算式,0)部分です。

=IF(OR($BC$2=4,$BC$2=5),0,IF(COUNT(BC4:BF4)=0,$BU$2,IF(BA4<=$AL$12,$BU$2,MIN(MAX(INT(($AL$8-INT(BO4))*$AL$9),0),$AL$7))))

そして次に上限HDCPは、最大値ではなく最小値なんですが、セル「AL7」に上限HDCPを50に設定しています。

50よりも大きいHDCPが計算された場合は、最小値50が選ばれて50よりも小さいHDCPの時はそのまま表示させるという事ですね。

上の黄色のマーカーの部分が比較して小さいほうMIN(計算式,AL7)という事なんです。

F支配人
F支配人

分解して計算式を考えていくと、それほど難しくはないと思いまませんか?

ピン君
ピン君

そう言われるとそんな気もするんだけど、ゆっくりやってね。

ハンデキャップを3週目まで固定して4週目から変動させる

このハンデキャップルールはあったり、なかったりかなあ?意外と珍しいかもしれませんね、ハンデキャップをリーグ戦なのに一定期間固定するなんてルール、急遽追加したから元々のルール設定になかったので追加したのがこれです。

リーグルール設定追加

固定・変動HDCPルール追加設定部分

セルAL12に固定HDCP-Wという固定したい週から1を引いた数字を入れています。

この数字と同じ開催週以下ならば、選手登録時のHDCPを使用して、それ以上の開催週ならば、アベレージに基づいたHDCPを使用するという事ができるようになります。

ピンすけ
ピンすけ

なんで3週目の3じゃなくて-1した2を入れているの?

F支配人
F支配人

レコードシートに反映させる為に3週目対戦のHDCPは2週目終了時点で算出しているので、1週前という事で-1なんですよ。

ピンすけ
ピンすけ

へぇ~!

という事で、この部分の計算式は黄色いマーカーの部分ですよ。

=IF(OR($BC$2=4,$BC$2=5),0,IF(COUNT(BC4:BF4)=0,$BU$2,IF(BA4<=$AL$12,$BU$2,MIN(MAX(INT(($AL$8-INT(BO4))*$AL$9),0),$AL$7))))

セル「BA4」は回数入力列で上から1週目、2週目となっていますね。

セル「AL12」は固定する回戦数-1の数字「2」が入力されているので、3週目まで固定です。

セル「BU2」は選手登録時のHDCPを表示していますのでここのHDCPが固定時に使います。

これで、もし今回の回戦数が固定期間以下ならば、登録時HDCP使用して、それ以上の回戦数ならば成績に基づいたHDCPを使用するって事ですね。

F支配人
F支配人

これで、固定期間対応の成績に基づいたHDCPの計算は整数で最小0、最大50の範囲内に指定する計算式が出来上がりましたね。

未登録選手・おばけ・プロは常にHDCPは0にする

この部分は、必要のないHDCPを常に0にしておくという計算式で、この成績表は最大40名まで対応しているので、未登録選手のところまでAVEを登録しておかないとエラー表示になってしまいます。

また、おばけやプロにHDCPは一般的につけないので、選手登録時に性別を登録するので「おばけ」や「プロ」の時は0にするという事ができるようにしておきましょう。

そしてこの部分は、黄色いマーカーの部分です。

=IF(OR($BC$2=4,$BC$2=5),0,IF(COUNT(BC4:BF4)=0,$BU$2,IF(BA4<=$AL$12,$BU$2,MIN(MAX(INT(($AL$8-INT(BO4))*$AL$9),0),$AL$7))))

セル「BC3」は性別番号が表示されていて、4はプロ、5はおばけにしてあります。

ここでは、IF関数とOR関数を組み合わせているのですが、日本語表示にすると・・・

もし、性別番号が4または5のどちらかの条件を満たしたら、0にして、それ以外は以下の計算式の値にするって事です。

F支配人
F支配人

OR関数で、どちらかの条件を満たした場合とできるんですよ。

意外と便利で簡単に使えるんで、愛用しています。

最後にBLの時を加えれば完成ですよ。

BL時は前回のHDCPを使う

上の赤いマーカーの部分「IF(COUNT(BC4:BF4)=0,$BU$2,」がブラインド時には、登録時のHDCPを使用っていう計算式なんです。

もし、1G~4Gの入力済みセルの数が0だったら、登録時HDCP(セルBU2)を使い、そうでなければ以下の計算式って事です。

F支配人
F支配人

遅刻や早退で1Gだけでも投げていれば、成績に応じたHDCPを計算するって事にしています。

ピンちゃん
ピンちゃん

そうなんだ!これで私にもできるような気がしてきた!

F支配人
F支配人

ちなみに今まで、1週目終了時点でのHDCPの計算式についてでしたが、2週目以降若干異なります。

セルBU2が、BU4,BU5と前の週を参照するように設定する必要がありますよ。

あと、BC4:BF4とスコアーの部分が2週目ならば、全ての範囲になるので、BC4:BF5となります。1週目と2週目全部になります。

ピン君
ピン君

おいおい、出来そうな気がするって本当かい?

全くそんな気がしないよ~

F支配人
F支配人

ここまでで、個人のスコアー登録・計算式は完了だよ!

次は入力した個人スコアーを集計した「個人成績一覧表」を作りましょう。

あわせて読みたい
個人成績一覧表をつくろう 前回までで、ボウリングリーグ戦の個人成績に関する計算式はひと通り、出来るようになったと思いますが、今度は1枚の紙にまとめて表示する成績表を作りましょう。 F支配...

エクセルで作るリーグスタンディングへ戻って続きを見ましょうね

あわせて読みたい
たった5分でエクセルのボウリング成績表を完成させる方法 ボウリングのリーグ戦の成績表をASで管理ではなく、エクセルで管理しているんですよね。 そして、毎週の成績スコアー入力をして、並べ替えして、ハイゲームなど探して、...

スポンサーリンク





よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次