• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでランダムに隠しホールを設定する方法No2)

エクセルでランダムに隠しホールを設定する方法No2

このQ&Aのポイント
  • エクセルでゴルフの隠しホールをランダムに設定する方法を質問させていただきましたが、うまくいかずに問題が発生しています。
  • 特定の条件でランダムな番号を選ぶ方法を試してみましたが、結果に問題があります。
  • 問題の原因を特定し、解決策を見つけるために検証を行いましたが、まだ解決できていません。

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

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

>検証していただき、訂正の必要がある箇所がありましたらご指摘いただきたく存じます。 式はそれで良いのですが入力後にCtrl+Shift+Enterで確定してください。 前回の質問でも説明しましたが入れ子のIF関数は配列を返す必要がありますので普通にEnterで確定するとエラーになります。 抽選数が1つの場合はIF関数で返った数列から1番小さい値のみで良いことになりますので変数にする必要はありません。 2つ以上を選ぶときはSMALL関数で何番目を取り出すかを変数で指定すると同じ列の下の行へコピーすることで入力の手数を省けます。 但し、コピーする場合はセル位置を絶対アドレスで指定する必要があるヶ所に$マークを付けます。 提示の式は応用性に欠けるだけで単独セルに対する式としては正しいと言えます。 式の確定時にCtrl+Shift+Enterの打鍵を忘れないようにしてください。

ama-chin
質問者

お礼

前回に引き続き、今回の質問においてもご面倒をおかけし 誠に申し訳ございません。 #VALUE!のエラーが返ってくる理由は、1回目の質問で Bunjiiさんがすでに記載してくださっておりました。 それを見逃し、首をひねっていた自分を非常に情けなく思います。 Bunjiiさん、MackyNo1さん、本当にご迷惑をおかけ いたしました。 ご回答いただいた方すべてにベストアンサーとしたいのですが 今回の質問内容と前回の質問にあまりに重複が多く、 引き続きご回答いただいたということで、Bunjiiさんの 回答をベストアンサーとさせていただきたく存じます。

その他の回答 (2)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

参考までに。 提示された数式に対する回答はすでにNo1に示した通りですが、Ctrl+Shift+Enterで確定しなくても配列数式と認識させるには、IF関数を使わずに加減乗除した配列にして、それをINDEX関数を利用して通常の範囲とする方法があります。 たとえば例示されたデータなら以下のような数式にします。 (SMALL関数で一番小さい値はMIN関数と同じなので変更してみました) =MOD(MIN(INDEX((B2:B10<>4)*10000+C2:C10,)),100) 数式の意味は、B列のデータが4以外なら10000を掛けて(4の場合は0になる)、この値とC列のデータを加えた値の中の最小値の下一桁の数字を取得しています。 例示の式はC列に補助列を設けていますが、A列とB列の値だけで該当のデータをランダムに抽出したいなら、以下のような関数にするほうが無駄がなく合理的です。 =LARGE(INDEX((B2:B10=4)*A2:A10,),RANDBETWEEN(1,COUNTIF(B2:B10,4))) 上記の数式の意味は、まずINDEX((B2:B10=4)*A2:A10,)でB列が4の場合はA列の値、それ以外の場合は0の配列(範囲)を取得しています。その配列の中から、大きい順に数えて、RANDBETWEEN関数で「1~B列が4のセルの個数」の値の中からランダムに求められた順位の数値を取得しています。

ama-chin
質問者

お礼

先ほどの回答に加え、非常に合理的な提案をしていただき 誠にありがとうございます。 今回は質問内容にある方法でかなりのデータを組み上げて しまっていますので、ご提案頂きました方法は、今後の 参考にさせていただこうと考えております。 みなさまの理解の深さに驚愕するっともに、自分の理解の 浅さが恥ずかしくなります。 本当にご教授感謝いたします。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

D2=MOD(SMALL(IF(B2:B10=4,C2:C10,""),1),100) 上記の数式は配列数式ですので、入力後Ctrl+Shift+Enterのキー操作で確定する必要があります。 数式の意味は、B2:B10セルが4の場合は、対応する行のC列の値を返し、それ以外の場合は「””」の配列を返しますので、その中で最小値のC列の値の下一桁を取得する式になっています。 一方、配列数式にしない場合は、B列に4が入力されている場合のみ、C2:C10のセル範囲を返しますので、単純にC列の一番小さい数字の末尾が求められることになるわけです(4以外の場合はVALUEエラーになります)。

ama-chin
質問者

お礼

非常に詳しい説明ありがとうございます。 おかげでなぜエラー表示が返ってくるか理解できました。

関連するQ&A