%20%E7%B5%90%E6%9E%9C%E3%81%AE%E9%A0%BB%E5%BA%A6%E3%82%92%E8%BF%BD%E8%B7%A1%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
私はExcelやLibreOffice Calcを使って大量のサイコロを振るシミュレーションをしようとしています。ここ生成する数字の数と数字生成範囲を指定する値に基づいて複数の乱数を生成し、その合計を加算する数式:
=SUM(RANDBETWEEN(1,(ROW(INDEX($A:$A,1):INDEX($A:$A,$A2))<=$A2)*$B2))
私がやろうとしているのは、このように「サイコロ」の合計を計算するのではなく、特定の結果が何回発生したか、たとえば 1 が何回出るかを示す出力を取得することです。
セルの列または行に出現する値の頻度を判定しようとする場合に、さまざまなカウント関数を使用してこれを行う方法はわかっていますが、その単一のセル内で生成された数値のセットに対してこれを行う方法がわかりません。
これは本当に可能なのでしょうか? ご協力いただければ幸いです。
(願わくば)さらに明確にするために編集します:
たとえば、上記の関数は次のような結果を生成します。
これによって、振るサイコロの数 (A2) とサイコロの面の数 (B2) を指定できます (画像には定数修飾子も含まれていますが、ここでは気にしません)。その後、1 つのセル (画像の E1) で、それらのパラメータ内で複数の乱数を生成し、その合計を一覧表示します。つまり、画像では、1 から 3 までの 2 つの数字が生成され、定数修飾子 2 が追加されて、結果は 7 になります。
私が理解しようとしているのは、E1 セルの出力に、特定の値が生成された回数を示すようにする方法です。したがって、この例では、出力 7 を取得するには、ランダムに生成された 2 つの数字が 2 と 3 である必要がありました。私がやりたいのは、E1 の出力が 3 が生成された回数と同じになるように指定する方法を見つけることです。そうすると、この例では、E1 セルに 1 が表示されます。
編集2:
つまり、#dice と #sides の値を入力すると、現在記述されている関数は 1 から #sides の値までの間でいくつかの乱数を生成し、それらの合計を出力します。#dice の値が 3 の場合、3 つの乱数を生成し、その 3 つの数値の合計を返します。#dice の値を 10 に変更すると、10 個の乱数を生成し、それらの合計を返します。ランダムに生成された数値は表示されず、合計のみが表示されます。
私は乱数の合計には興味がありません。代わりに、乱数を生成するときに特定の数字が生成される頻度を追跡するように関数を変更したいと考えています。
たとえば、#dice が 4 で、#sides が 6 で、関数が 1、3、5、1 という数字のセットを生成するとします。私が期待している解決策は、1 が 2 回生成されたとカウントし、関数の出力が 2 になることです。4、5、1、3 のセットが生成された場合、出力は 1 になります。1、1、1、2 のセットの場合、出力は 3 になります。
現在の関数と同様に、私が見つけようとしている解決策は、ランダムに生成された数字を実際に表示するのではなく、最終的な出力、つまり 1 が生成された回数だけを表示します。1 が生成される頻度を追跡するための単一セル配列数式と同じです。
答え1
=COUNTIF(RANDBETWEEN(1,(ROW(INDEX($A:$A,1):INDEX($A:$A,$A2))<=$A2)*$B2), 1)
これで、私が探していたものが実現しました。後者の COUNTIF 条件も変更できます。たとえば、1 の発生頻度を追跡する代わりに、最後の条件として「<=2」と入力すると、セルには 1 または 2 が出た合計数が出力されます。
編集: さらにテストしてみると、乱数を 1 つだけ生成するとエラーが発生するようです。明らかに完璧な解決策ではありませんが、私の目的には十分です。