• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ランク表の小数点の計算)

グーグルスプレッドシートでランク表の小数点の計算に問題が発生

このQ&Aのポイント
  • グーグルスプレッドシートで作成したランク表で、小数点の計算がうまくできない問題が発生しています。
  • 左側の青色の「実績」の部分のB4の丸山倫子の数字が小数点だと、右側の赤色の「ベスト10」の4位のG5の部分が空白になってしまいます。
  • 小数点の存在するデータを正しく計算する方法を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>ご説明頂いている内容が私には高度すぎてしまい、頂いたご回答を元に実際にどのように反映させていいのか理解できませんでした。 回答の一部に誤りがありましたことを先ずお詫びします。 MOD(75.1+4/1000,1)*1000 → 1004 (A1004の値はブランクと推定します)      ↓ MOD(75.1+4/1000,1)*1000 → 104 (A104の値はブランクと推定します) 他人が組んだ数式を理解しないで流用しているとそのようになります。 質問に提示されている数式はA列の名前一覧からスコアの小さい方から順に抽出する考え方です。 しかし、ゴルフのスコアは端数がありませんので対象人数を1000人未満と想定した数式のようです。 例えばスコアが1番小さい値の行番号は26(B26の値が最小の71)です。 また、同様に4番目に小さい値の行番号は4(B4の値が4番目に小さい75.1)でなければなりません。 提示の数式ではスコア+行番号/1000で順位を判定してますので指定の順番の値からスコアの値を除いた行番号を取り出さなければなりません。 そのためにMOD関数で4番目の値の75.104「B4+ROW(B4)」を抽出して除数を1にすると小数部の0.104が取り出され、1000倍すると104になります。 除数を0.1にすると0.004が取り出されて1000倍すると4になります。 提示のスプレットシートでは対象人数が2桁なので除数を0.1にすれば解決できますが提示の数式は2行目から300行目までが計算対象なのでスコア+行番号/10000のように除数の桁を増やし取り出した結果を10000倍する等の処置が必要です。 >例えば、小数点以下2桁(例:89.25)までとする場合に以下の式を具体的にどのように変更すべきでしょうか。 前述の論理を理解した上で数式を修正してください。 =INDEX(A:A,MOD(SMALL(INDEX($B$2:$B$300+(B$2:B$300=0)*(MAX(B$2:B$300)+1)+ROW(G$2:G$300)/1000,0),ROWS(E$2:E5)),1)*1000)       ↓ =INDEX(A:A,MOD(SMALL(INDEX($B$2:$B$300+(B$2:B$300=0)*(MAX(B$2:B$300)+1)+ROW(G$2:G$300)/100000,0),ROWS(E$2:E5)),0.01)*100000)

megumi199
質問者

お礼

bunjiiさま 詳しく丁寧にご指導いただきましてありがとうございました。 非常にわかりやすく書いていただいたので理解できました。 また、最後に式を書いていただきましてありがとうございました。 お陰様で無事問題を解決することができました。 この度は私の理解不足により二度もbunjiiさまにご連絡いただきまして、貴重な時間を割いていただき感謝しています。 本当にありがとうございました。

その他の回答 (1)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.1

>どこを修正すれば、小数点でも正常に計算してくれるようになるか分かる方がいらっしゃいましたら是非アドバイス頂きたく何卒よろしくお願いいたします。 あなたの論理では整数のスコアに行番号を1000分の1にした値を加算した値から小さい順に取り出した値の小数部分を1000倍して行番号を復元していますので、スコアの平均値で小数を含むときはスコアの平均値と行番号の切り分けする桁位置を調整しなければなりません。 スコアの平均値が小数点以下1桁のときはMOD関数の除数を0.1にすれば正しい行番号を得られるでしょう。 尚、スコアの平均値が小数点以下1桁より多いときは行番号の除数の桁数を増やしてスコアの平均点と重ならないようにしないといけません。 MOD(75.1+4/1000,1)*1000 → 1004 (A1004の値はブランクと推定します) MOD(75.1+4/1000,0.1)*1000 → 4 (A4の値は"丸山 倫子")

megumi199
質問者

お礼

bunjiiさま ご連絡ありがとうございました。 ご説明頂いている内容が私には高度すぎてしまい、頂いたご回答を元に実際にどのように反映させていいのか理解できませんでした。 ;MOD(75.1+4/1000,1)*1000 → 1004 (A1004の値はブランクと推定します) ;MOD(75.1+4/1000,0.1)*1000 → 4 (A4の値は"丸山 倫子") 例えば、小数点以下2桁(例:89.25)までとする場合に以下の式を具体的にどのように変更すべきでしょうか。 =INDEX(A:A,MOD(SMALL(INDEX($B$2:$B$300+(B$2:B$300=0)*(MAX(B$2:B$300)+1)+ROW(G$2:G$300)/1000,0),ROWS(E$2:E5)),1)*1000) 恐れ入りますが、bunjiiさまのご連絡いただいた内容について理解したくなにとぞよろしくお願いいたします。

関連するQ&A