電子書籍の厳選無料作品が豊富!

エクセル2013でゴルフのハンディキャップの計算をしたいのですが、以下のような場合です。
5試合以下 Best 1のスコアー、6-7の場合 Best 2試合の平均、8-10の場合、Best 3試合の平均、。。。20試合の場合は Best 10試合の平均となります。
このような場合エクセルではどのような関数にしたらいいですか?

よろしく

質問者からの補足コメント

  • お礼のコーナーで書きましたが、間違っているところがあるので訂正させてください。5-6試合(Best1),
    7-8(2),9-10(3),11-12(4),13-14(5),15-16(6),17(7),18(8),19(9),20(10)で21以降の古いスコアカードは考慮されません。VBAでOKです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/02/26 00:09

A 回答 (3件)

なるほど。

ほかの質問コーナーは盛り上がってましたね。
ハンデキャップの正しい求め方云々は別として、ご質問に書かれている要件だけでユーザ定義関数(handicap)を作ってみました。何の捻りもないコードですが、ご参考までに。
また、自己解決しているようであれば、読み捨てて下さい。

HC表は画像のようなイメージを想定しています。
B2セルに、=handicap(C2:AB2) と入力し、下にオートフィルでコピーしてください。
引数で指定した範囲(とりあえず第26回~第1回で)の先頭から参加回数をカウントし、それによりベストx試合の平均を小数点以下切り捨てで求めています。

ちなみに、次回(第27回)のスコアを入力するときは、C列をコピーしてD列の前に挿入し、C列を第27回分にします。こうすると集計の範囲が、C2:AB2→C2:AC2に勝手に伸びてくれます。

以下、ユーザ定義関数のVBAコードです。
Function handicap(myRng As Range) As Variant
Dim r As Range
Dim a(10) As Variant
Dim c As Long
Dim i As Long
Dim j As Long
For Each r In myRng
If Trim(r.Value) <> "" Then
c = c + 1
For i = 1 To 10
If a(i) = 0 Then
a(i) = CLng(r.Value)
Exit For
Else
If CLng(r.Value) < a(i) Then
For j = 10 To i + 1 Step -1
a(j) = a(j - 1)
Next j
a(i) = CLng(r.Value)
Exit For
End If
End If
Next i
If c >= 20 Then Exit For
End If
Next r
Select Case c
Case 1 To 6
i = 1
Case 7 To 8
i = 2
Case 9 To 10
i = 3
Case 11 To 12
i = 4
Case 13 To 14
i = 5
Case 15 To 16
i = 6
Case 17
i = 7
Case 18
i = 8
Case 19
i = 9
Case 20
i = 10
End Select
c = 0
For j = 1 To i
c = c + a(j)
Next j
handicap = Int(c / i)
End Function
「ゴルフ ハンディキャップ」の回答画像3
    • good
    • 0
この回答へのお礼

ママチャリさん
ありがとうございます。
ぜひ参考にして試してみます。VBAでわからないことがありましたら、またお知恵を拝借することがあるこもわかりませんので、その時はよろしく。

お礼日時:2017/02/26 14:39

11~19試合、および、21試合以上の場合の平均すべき試合数の規則が想像できません。

その辺、補足できますか?
それからVBA(ユーザ定義関数)でも大丈夫でしょうか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。
Pick upする試合数は直近の試合におけるスコアカードで、11-12試合 (Best 4), 13-14 (5), 15-16 (6), 17 (7), 18 (8), 19 (9),20 (10)の平均と決められており、21試合以前の古いスコアカード(試合数)は考慮されません
私の手違いで同じ質問タイトルでほかにも質問コーナーが立ち上がっていますのでそちらも見ていただけるとありがたいです。Yujiさんからの回答でマクロでやろうとしていますが最終的にはあなたの言われるVBAでやる方が容易いと思い、現在VBAと格闘しています。もしお知恵を拝借できるならたすかります。よろしく

お礼日時:2017/02/25 23:37

スポーツカテで質問してください。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!