例えば、心電図のごとく、範囲内に2つピークがあるような分布ですと、もっとも簡単な方法は、ピークの場所だけが異なる2つのガウス分布の足し算でしょう。 同じ目 = 同じ目 + 1 '同じ目がでたことをカウントして記録 Random Number Generation (update, 12/10/08)   if strNameがDを含むなら、 then 3 – A7 それは、大雑把に見るのでしたら、散布図の形を見れば良いのではないでしょうか。それで、X,Y で期待する四角形(30万,30万)で概ね塗りつぶせれば、偏りが少ないだろうし、形やムラが出来れば、偏りがあるのだと判定できるはずです。, こんばんは。 Case "D"を含む Dim ZPOS As Double 答えになっているかどうかわかりませんが、私が「適当にこんな感じの作って」と仕事を頼まれれば、とりあえず、こんな感じでやります。 同じ目 = 0 dice1 = dice() '1個目のサイコロ InStr関数を利用するのが良いです。, さいころを2つ振って両方とも1の出る確率、同じ目が出る確率を求めるプログラムを作りたいのですが、初心者なのでまったくわかりません。誰か教えてください、お願いします。, Public Sub test() 2.偏りの程度や形を定義する分布(関数)の式の中に、普通の乱数を代入する。 If dice1 = dice2 Then '同じ目が出た   処理2 呼び出し方法の例は以下のようになります。, 0から50までの整数値をランダムに取得し、取得した整数値を表示してそれが25以上なら"A"、そうでなければ"B"と表示するコードです。実行結果は、実行する毎に変化します。, ちなみに、ランダムな0以上1.0未満の実数値を取得したい場合はNextDoubleメソッドで取得できます。, コンストラクタはオブジェクトを作成する時に呼ばれます。詳しいことは別の記事で載せる予定です。 dice = Int((6 * Rnd) + 1) ' 1 から 6 までの乱数を発生させる 作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。 3~9の出現率は0%です。 MsgBox "同じ目が出た割合:" & 同じ目 / 10000, , "同じ目が出た割合" そこに、RANDBETWEEN の説明も書かれていますが、RAND()関数と独立して検査は出来ないけれども、特に問題も見出せなかったとされています。 で、四捨五入 C#/VB.NETは簡単に乱数を生成できます!, C#/VB.NETで乱数を生成するにはRandomクラスを使用します。 1の出現率は20%です。 上記の様なことがしたいのですが、可能でしょうか? 宜しくお願いします, 「確率 エクセル」に関するQ&A: 統計的に、ある音が、ある文字で書かれる確率が、偶然以上かどうかをエクセルで調べる方法はありますか?, 世の中の成功している男性には様々な共通点がありますが、実はそんな夫を影で支える妻にも共通点があります。今回は、内助の功で夫を輝かせたいと願う3人の女性たちが集まり、その具体策についての座談会を開催しました。, 乱数が0~9まであります。 you can read useful information later efficiently. 6 – h 4 – b 他の波形にしたければ、分布(式)を取り替えればよいです。 確率(頻度)を規格化したければ、足した関数の個数で割り算すればよいでしょう。 ご質問は、偏りの中心がどこかにあることを想定しているので、まずは、1回乱数を発生させるか、勝手に意図的に決めるかして、偏りの中心を決めないといけませんね。 1 – A6 (2)A1~J30000までに「randbetween(1,300000)」という関数を入力し、30万個のセルに1~300000(30万個)のデータを入力しました。 例えば・・・ 乱数の結果が 乱数とは、本来サイコロを振って出る目から得られるような数を意味する。このような乱数は予測不能なものである。しかし、計算機を使って乱数を発生させた場合、次に出る数は完全に決まっているので、予測不能とはいえない。そこで、計算機で作り出される乱数を疑似乱数(PRNG)と呼び区別することがある。ここでは、特にことわらない限り乱数とは疑似乱数のことを指すとする。 計算機でソフト的に乱数を発生させることの最大のメリットは、再現性があることである。初期状態が同じであれば、発 … Randomクラス. B1に=Average($A$1,A1)と入れてB1000までコピーしました。 End Function 処理1 ご質問は、偏りの中心がどこかにあることを想定しているので、まずは、1回乱数を発生させるか、勝手に意図的に決めるかして、偏りの中心を決めないといけませんね。 通常、配列はなんらかの規則性を持って並んでいることが多いのですが、並び順が不規則であることが必要な場合があります。データの最大や最小や昇順や降順などを無視した状態でのテストを行うような場合で、データがいくつあるか不明、最大値も不明、最小値も不明、でもそこから結果がどうなるのかを検証しなければならない、というようなことがあります。 そのような場合には規則性を持ったデータ列はむしろ邪魔で、めちゃくちゃな並び順であることの方が必要になります。手で入れ替えてもい … これで平均値の途中経過もわかるようになります。 ZPS = InputBox(">>> ステップを入力してください<<<") とかですね。 参考URL:http://www.big.or.jp/~seto/VBA/vba-p3.htm, EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。 そのせいで昔、どこがおかしいのか分からなくてずっと悩んでいた時がありました。, 対策方法としては、宣言文をループの外に出すというのが良いでしょう。 どうやって見ればいいのかと、とまってしまっています。 英文資料です。 偏りの中心が本当に任意であれば、ただの平べったい乱数に戻ってしまいますよね。  Endif どなたか説明頂けませんか? 「指定項目」のところに「Public」と「Private」の説明がありますよ。 これは0.1未満の数値も出てしまうからだと思いましたので、 あるいは、偏る場所が複数あるような分布にしたければ、上記の分布(関数)を複数計算して、それらの和をとってもよいと思います。 オブジェクトの作成は変数宣言とほぼ同じです。, はい、これだけで乱数を生成する準備は完了です!ね、簡単でしょ? ここではC#とVB.NETでランダムな数値を生成する方法を紹介します。 Sub hokangosa() Case Else 乱数の範囲を0.1~0.9に絞ると平均値のぶれはとても小さくなりました。 なるべくExcelだけですむようにと考えています。 IDE: Visual Studio 2015 OS : Windows 10 ※自分の環境です. ですね。 面白い疑問だなと思ったので試してみました。 発生した100個の乱数をコピーして形式を“値”にして貼り付けてその100個の乱数の平均や中央値をみてみると0.5にはならないことから疑問に思いました・・・。 90~99 なら 2 を返します 0.01~1.00が欲しければ=Rand()*(1-0.01)+0.01とすればいいです。, ExcelのRand関数、RandBetween関数はあまり精度がよくないので、メルセンヌツイスターを利用した乱数精製器を使えと、よく言われます。 質問が的外れだったらすみませんExcelのVBAで、たとえば1から5の数字をランダムで出す時2の出る確率を他より高くする方法はありますでしょうか?宜しくお願いします昔、Accessでやった場合はこんな感じ。参考になるかな?Function omi そこで質問です。 偏りの中心が本当に任意であれば、ただの平べったい乱数に戻ってしまいますよね。 Case Else なので Test1はPublicで、Test2はPrivateだからです。, こんにちは。 Select Case strName End If 乱数の振れ巾や平均値の移動の様子がわかります。 By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. 両方1 = 0 VBAを用いてパチスロシミュレータを作成しているのですが 乱数が偏っている気がしてなりません。 乱数はRnd関数を用いて0~65535の範囲で生成しています。 もちろん初期化時にRandomizeも用いています。 毎ゲーム開始時にそのゲームで必要な乱数を4つ 引数で、対象桁を変更できます。, エクセルのマクロを使用してボタンを押せば、ランダムに『大吉』『中吉』など出るようにしたいのですがどうすればよいでしょうか?ご指導お願いいたします。, こんなの? さらには、偏ると言っても、偏り方に無限の種類がありますから、例えば、ガウス分布とかポワッソン分布とかの類の確率分布の情報を固定して与えなければ、やはり平べったい乱数になってしまいますよね。 ThisWorkbook.Name Dim dice1, dice2 もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。 7 – A2. という考え方をすれば良いかと, エクセルで=RAND()を用いてA1~A100のセルに100個乱数を発生させたときに(乱数は0~1の幅)、0~1の値を偏り無く発生させることは可能でしょうか?? http://www.big.or.jp/~seto/VBA/vba-p3.htm C#/VB.NETで乱数を生成するにはRandomクラスを使用します。 > 「"D"を含む」の部分はどのように書いたらいいですか?? 3 – e ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。 dice2 = dice() '2個目のサイコロ 本来、RAND 関数で、自然乱数ではなく擬似乱数(pseudo-random numbers)ですが、日本語サイトの情報では、あまり正確な情報が出ていないようです。   処理3 Dim DMN As Double ActiveWorkbook.Name 同じ目:1.167 ただし、中心極限定理などに見られるような「中心にのみ偏る」乱数ではなく、「任意の位置を中心に偏る」乱数です。例えば、範囲を0.0<1.0、任意の位置を0.75とした場合の分布グラフを見ると、0.75がカーブの頂点となります。 ご教授のほど、よろしくお願いします。, ExcelのRand関数、RandBetween関数はあまり精度がよくないので、メルセンヌツイスターを利用した乱数精製器を使えと、よく言われます。 DMN = ZPOS / ZPS ・・・って、そもそもご質問の目的・用途は何なのか、ちょっと気になりますが。, 専門家でないので適切なことを言えるかどうかわかりませんが、 プログラミングの世界の中でいわゆる “乱数” として扱われることが多いのは擬似乱数です。疑似、と付くからには、これは実のところ乱数ではないと言えます。とは言え、擬似乱数を乱数でないと言ってしまうと話が終わってしまうので、疑似乱数を含む乱数を広義の乱数とします。この記事で扱うのは広義の乱数です。逆に、狭義の乱数、本物の乱数は真乱数と言います。 本物と言いましたが、真乱数が良くて疑似乱数が悪い、という訳でもありません。用途によっては、擬似乱数の「疑似」の部分が必要 … やってみたところ そこで、RANDOM について、旧バージョンと比較して、Excel 2003/2007 (2003には、バグが残っています)が、一応、100万回以上を試さない限りは、乱数は保証できると言っています。 この記事を読むのに必要な時間は約 4 分です。 VBAで乱数を生成する方法についての記事です。 Rndという関数を使うんですが、単純にRndと書いて実行しても、思ったような結果は得られないと思 … このときの式は=Rand()*(0.9-0.1)+0.1としてやればいいです。 Next このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。 って感じですかね。 Select Case strName (3)さらにL1にcountif($A$1:$J$30000,(1))と入力し((1)の部分は1~300000)出現数をカウントしました。 省略して「Sub hogehoge()」とした場合は「Public」とみなされます。 1 – c Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか? What is going on with this article? 0 – a A1からB1000までを選んで折れ線グラフを作成し、何度か再計算をすると >VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり pdf 資料(私は、30P の内、半分程度しか読んでいません。) 2の出現率は10%です。 ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。 そこで、RANDOM について、旧バージョンと比較して、Excel 2003/2007 (2003には、バグが残っています)が、一応、100万回以上を試さない限りは、乱数は保証できると言っています。 RandomオブジェクトにはNextメソッドが3つ定義されていますが、その中でも個人的によく使うものを紹介します。, よく使うメソッドなので是非覚えましょう。 2 – A8 ・実際に生成する時は、RandomオブジェクトのNextメソッドを呼び出す。, 現役SEで、C#, VB.NET, Javaを得意としています。その中でも特にC#をよく使用してます。 Excel 2007 と Excel 2003 の RAND 関数について つまり、minValue以上、maxValue未満のint型の整数値が返ることになります。 2 – d ExcelのVBAで、たとえば1から5の数字をランダムで出す時 Function dice() As Integer For 試行回数 = 1 To 10000 '1万回試してみる End Select If dice1 = 1 Then 両方1 = 両方1 + 1 '両方1がでたことをカウントして記録 Case "ABC" まずはnew演算子でRandomオブジェクトを作成します。 0~69 なら 0 を返します If dice1 = dice2 Then '同じ目が出た これを呼び出すとminValueからmaxValueまでの範囲でランダムな整数値を取得できます。 お客様の許可なしに外部サービスに投稿することはございませんのでご安心ください。, 統計的に、ある音が、ある文字で書かれる確率が、偶然以上かどうかをエクセルで調べる方法はありますか?. また一方で、複数の偏りが見られる乱数のアルゴリズムも知りたいです。カーブが心電図のように複数見られる乱数です。ビットマップ上にプロットすると、部分的に点の集合が形成されるようなものが理想的です。 dice1 = dice() '1個目のサイコロ 質問が的外れだったらすみません とはいえ、これほどのデータだとグラフを書くのも不可能(エクセルのグラフ機能は使用できるデータの個数が限られています)。 そこで質...続きを読む, こんばんは。 End Select 以下は上記のソースを修正したソースになります。, このようにすれば、同じ数値が連続して出てくることは無くなります。低確率で連続することはあります。, ・C#/VBで乱数を生成したいときはRandomオブジェクトを作成して準備する Randomize ' 乱数発生ルーチンを初期化します。  しかし、 なんとなく、悪いのだろうな(というよりそれほど重要視していないだろう)という認識はありますが、実際どの程度悪くて、どんなレベルになら利用しても差し支えなくて、どんな状況下では使ってはいけないのか、線引きをするため(と統計学の手法を勉強したいこともあって)自分で検証してみようかと考えています。 2の出る確率を他より高くする方法はありますでしょうか? A1に=Rand()を入れてA1000までコピーしました。 5 – g MsgBox "同じ...続きを読む, ※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。 例えば、以下のようなソースがあったとします。, 実際はそうではなく、同じ数値が連続で出力される現象が起こります。 1000個の数字でも平均値で0.45~0.55くらいの振れは出るんですね。 ZPOS = Sheet1.Cells(22, 4).Value  Else こういうことは、使用する乱数(の良さ)に依るところもあるので、まあ、なんとも言えないですけど。 Why not register and get more from Qiita? '------------------------------------------------ MsgBox "両方1が出た割合:" & 両方1 / 10000, , "両方1が出た割合" 「Select Case」の条件の一つに、文字列で○○を含むというのは指定できるのでしょうか? の方ですかね。, 初歩的な質問で申し訳ありませんが・・・ 両方1:0.0288 同じ目:1.16666…(1/6) いろいろ探してみましたが、以下の論文が一番、話の内容が納得できるようです。 Case "ABC" 両方1:0.02777…(1/36) 4 – A5 になりました。 実験結果としては、両方1が出るのが若干大きくなりました。 さらには、偏ると言っても、偏り方に無限の種類がありますから、例えば、ガウス分布とかポワッソン分布とかの類の確率分布の情報を固定して与えなければ、やはり平べったい乱数になってしまいま...続きを読む, ネットで探してみたのですが、計算結果を四捨五入して特定のセルを ご存知の方アドバイスよろしくお願いします。, こんにちは いろいろ探してみましたが、以下の論文が一番、話の内容が納得...続きを読む, 偏りのある乱数のアルゴリズム(コード)を教えてください。 70~89 なら 1 を返します 6 – A3 Caseの中ではNGです。 よろしくお願いします。, 0~99 の範囲で乱数を出します ただし、maxValueは含まれないので注意しましょう。 MsgBox (" >>> 補間誤差自動計算 <<< ") そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。 同じ目 = 同じ目 + 1 '同じ目がでたことをカウントして記録 教えてください。宜しくお願いしますm(_ _)m, > 文字列で○○を含むというのは指定できるのでしょうか? 標準偏差はバラつきを示す指標のひとつですが、完全にばらついた(ユニークである事)を示す指標に使うと意味がわからないです。 Dim 試行回数, 両方1, 同じ目 理論的には、 ここでDMNの値を四捨五入したいです。 If dice1 = 1 Then 両方1 = 両方1 + 1 '両方1がでたことをカウントして記録 で、現在 "アクティブにして" 操作対象になっているブックの名前は 0の出現率は70%です。 0 – A1 自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。 http://support.microsoft.com/kb/828795/ja For 試行回数 = 1 To 10000 '1万回試してみる 1.偏る場所や個数を決める、あるいは発生させる Excel 2007 と Excel 2003 の RAND 関数について なるべくExcelだけですむようにと考えています。 で切り上げです。 C#/VB.NETは簡単に乱数を生成できます! 乱数はよく使うので、覚えておくと便利です。 開発環境. 可能でしたら、「"D"を含む」の部分はどのように書いたらいいですか?? またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。, DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0) >とはいえ、これほどのデータだとグラフを書くのも不可能(エクセルのグラフ機能は使用できるデータの個数が限られています)。 End If Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。 以上は一次元の話なので、二次元で、ある点の回りに分布をつくりたい場合は、上記に対して従来の中心分布を応用した考え方になるでしょう。 返すにはどうしたらいいのでしょうか? End Sub ここまでやってみてぱっと見で意外とダブっているなと認識したのですが、これを統計的にどの程度ばらついていないのか、を議論するにはどうすればいいでしょうか? 処理2 というような文脈からすると、 処理1 Sheet1.Cells(23, 6).Value = DMN ただし、C#では以下のようにSystemが明示的にインポートされていないと使えないので注意しましょう。ですが、ソースを新規作成した時に大体は自動的に付加されるのであまり気にしなくてもよいでしょう。, 先ほど作成したRandomオブジェクトのNextメソッドを使用することでランダムな数値を得ることが出来ます。 Excelの作業で切っても切り離せない乱数ですが、VBAでは、Rnd関数を使用します。今回は簡単なその使い方をご紹介します。 Rnd関数の使い方 Rnd関数は、0以上1未満の乱数を返します。構文は下記… DMN = Application.RoundUp(ZPOS / ZPS, 0) ※プログラミング言語・精度・速度は不問。本人数学に関しては素人です。, 専門家でないので適切なことを言えるかどうかわかりませんが、 XVIII. Dim 試行回数, 両方1, 同じ目 7 – f Dim ZPS As Double 次の出現率に従って乱数を生成したい場合どのように行えば良いでしょうか? で切り捨て 5 – A4 処理3 よろしくお願いします。, 「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。 というわけで、 両方1 = 0 MsgBox (" >>> 初期値入力します <<< ") End Sub Help us understand the problem. 少しでもお役に立てれば幸いです!. VBAで乱数を取得するにはRnd関数を使います。 Rnd関数は、0以上1未満のランダムな小数を返すので、整数の乱数が欲しいときには工夫が必要です。 戻り値は0以上1未満の数なので、Rnd関数が返す数値の整数部分は、いつでも0です。 http://www.daheiser.info/excel/frontpage.html ThisWorkbook.Name Randomize ' 乱数発生ルーチンを初期化します。 本来、RAND 関数で、自然乱数ではなく擬似乱数(pseudo-random numbers)ですが、日本語サイトの情報では、あまり正確な情報が出ていないようです。 通常、配列はなんらかの規則性を持って並んでいることが多いのですが、並び順が不規則であることが必要な場合があります。データの最大や最小や昇順や降順などを無視した状態でのテストを行うような場合で、データがいくつあるか不明、最大値も不明、最小値も不明、でもそこから結果がどうなるのかを検証しなければならない、というようなことがあります。, そのような場合には規則性を持ったデータ列はむしろ邪魔で、めちゃくちゃな並び順であることの方が必要になります。手で入れ替えてもいいのですが、数が多くなれば当然大変です。, 処理速度はO(n)と高速に動作するフィッシャー-イェーツのシャッフルアルゴリズムを採用しています。当該アルゴリズムについての詳細は各自で。, 処理の開始時に引数配列の要素数を取得し、要素が1つしかない場合は入れ替える必要がないため関数を抜けます。, 引数の配列のデータ型はなんでもOKにしたいので、先にデータ型を取得しています。なお、IsObject(ar)と書いてしまうと要素ではなく配列自体の型をとってVariant型と判定されて常にFalse扱いになるため、IsObject(ar(0))として配列の要素でデータ型の判定を行っています。, メインのループ部分ですが、一般的な配列ループは先頭から終端に向かいますが、逆に終端から先頭に向かってループしています。これは2つの理由があり、一つはアルゴリズムのルールに従っていることと、乱数値を取得する際の終端値をループごとに1ずつ減らす必要があるのに都合が良かったためです。, 同じことを先頭から終端に向かって行うループ(逆順でのループ)でもできますが、(考えるのが面倒だったので)やりませんでした。, ループ内ではループごとに0から配列インデックスの終端値の範囲でRnd関数を使って整数値を取得し、配列のインデックスに利用します。, Rnd関数や乱数については「VBAで乱数を発生させる(Rnd、Randomize)」をご参照ください。, 実行結果(実行するたびに並び順は変わります) 常にファイル名を取得出来るVBAをどなたか、教えて下さい。, >現在開いているブックのファイル名 http://support.microsoft.com/kb/828795/ja Next Randomクラスのコンストラクタには引数無しのタイプと整数値を引数として渡すタイプの2つがあります。, 以下のソースは下側のコンストラクタでRandomオブジェクトを作成しています。 前提条件から覆してこういう見方をするべきだ、という意見も大歓迎です。 同じ目 = 0 (1)まず、データの個数は30万個にしました(うちのPCで操作できる限界がこの辺でしたので)  ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は Dim dice1, dice2 試行回数は、適当に大きくしたりしてみて下さい。, Public Sub test() なんとなく、悪いのだろうな(というよりそれほど重要視していないだろう)という認識はありますが、実際どの程度悪くて、どんなレベルになら利用しても差し支えなくて、どんな状況下では使ってはいけないのか、線引きをするため(と統計学の手法を勉強したいこともあって)自分で検証してみようかと考えています。 Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。 Randomオブジェクトを作成するとき、場所に注意が必要です。 DMN = Application.RoundDown(ZPOS / ZPS, 0) dice2 = dice() '2個目のサイコロ これを実行するとランダムな数値は得られていますが、実行結果は何回やっても同じになります。, 以前、私がゲームを作ってた時に引っ掛かったので一応書いておきます。