Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9128 / 13644 ツリー ←次へ | 前へ→

【29172】Randomizeステイトメントについて教えてください。 ちくたく 05/9/27(火) 10:22 質問[未読]
【29176】Re:Randomizeステイトメントについて教え... 小僧 05/9/27(火) 10:44 発言[未読]
【29183】Re:Randomizeステイトメントについて教え... ちくたく 05/9/27(火) 11:20 質問[未読]
【29193】Re:Randomizeステイトメントについて教え... 小僧 05/9/27(火) 13:30 回答[未読]
【29202】Re:Randomizeステイトメントについて教え... ちくたく 05/9/27(火) 16:24 お礼[未読]
【29182】Re:Randomizeステイトメントについて教えて... だるま 05/9/27(火) 11:19 発言[未読]
【29184】Re:Randomizeステイトメントについて教えて... ちくたく 05/9/27(火) 11:22 お礼[未読]

【29172】Randomizeステイトメントについて教えて...
質問  ちくたく  - 05/9/27(火) 10:22 -

引用なし
パスワード
   こんにちは。
標題について、教えてください。
Randomizeステイトメントは、Numberを指定しない場合、
システムタイマを使って、乱数の種を生成するみたいですが、
次のような場合。

Randomize
r = Int(255 * Rnd)   '// 0 から 255 までの乱数を発生。赤。
g = Int(255 * Rnd)   '// 緑
b = Int(255 * Rnd)   '// 青

Randomizeステイトメントは意味があるのでしょうか?
抽象的な質問ですいません。
何がわからないのか、よくわかっていない状態です。

【29176】Re:Randomizeステイトメントについて教え...
発言  小僧  - 05/9/27(火) 10:44 -

引用なし
パスワード
   ▼ちくたく さん:
こんにちは。

Excel でも検証できるのですが、よりお手軽な VBS で検証してみましょう。

適当にメモ帳を開いて

Randomize
Msgbox Int(255*Rnd)

とでも書いて拡張子を .VBS にして保存。

実行する毎に違った値が表示されると思います。


この Randomize を消すとどうなるでしょうか?

Int(255*Rnd) という事で違った値が返ってくると思いきや、
必ず一定の値(当方の環境では 179 ) が返ってきませんでしょうか。

【29182】Re:Randomizeステイトメントについて教え...
発言  だるま WEB  - 05/9/27(火) 11:19 -

引用なし
パスワード
   関連スレッドにもレスがついていますが一応。^d^

>r = Int(255 * Rnd)   '// 0 から 255 までの乱数を発生
255までなら

r = Int(256 * Rnd)
としないといけません。

(Rndは0以上1未満の値を返しますので。)

【29183】Re:Randomizeステイトメントについて教え...
質問  ちくたく  - 05/9/27(火) 11:20 -

引用なし
パスワード
   小僧 さん
こんにちは。

早速の返信ありがとうございます。

>この Randomize を消すとどうなるでしょうか?
>Int(255*Rnd) という事で違った値が返ってくると思いきや、
>必ず一定の値(当方の環境では 179 ) が返ってきませんでしょうか。

試してみました。
私の環境では、同じですが、179が帰ってきました。
Randomizeステイトメントは、乱数の種生成器と考えればよろしいのでしょうか?

あと、ひとつ、乱数なので、正しいのか間違ってるのかわからないのですが、
先ほど質問いたしました。

Randomize
r = Int(255 * Rnd)   '// 0 から 255 までの乱数を発生。赤。
g = Int(255 * Rnd)   '// 緑
b = Int(255 * Rnd)   '// 青

なんですが、これについては、変数r,g,bそれぞれに、
乱数で生成された異なる値が格納されています。

これと、

Randomize
r = Int(255 * Rnd)   '// 0 から 255 までの乱数を発生。赤。
Randomize
g = Int(255 * Rnd)   '// 緑
Randomize
b = Int(255 * Rnd)   '// 青

とは違うのでしょうか?
というか、こうしなくても大丈夫なもんなんでしょうか?

Randomizeステイトメントの中では、常にらRnd関数を使うたびに、
乱数の種が初期化されるんですかね?
?ばっかりで申し訳ありません。なんか混乱しています。

【29184】Re:Randomizeステイトメントについて教え...
お礼  ちくたく  - 05/9/27(火) 11:22 -

引用なし
パスワード
   だるまさん。
こんにちは。

>>r = Int(255 * Rnd)   '// 0 から 255 までの乱数を発生
>r = Int(256 * Rnd)
>としないといけません。

ありがとうございます。
そうですね、気づきませんでした(恥)
乱数使うことが今まで無かったので、ちょっととまどっています。
助かりました。

【29193】Re:Randomizeステイトメントについて教え...
回答  小僧  - 05/9/27(火) 13:30 -

引用なし
パスワード
   ▼ちくたく さん:
こんにちは。
当方も「Rnd関数を使う前にはRandomizeで初期化する」くらいの知識しかないので
ちくたくさんが納得できそうな回答ができなくてすみません。


ウィキペディアより:擬似乱数
http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0

初期値(シード値)が一定なら同じ乱数を発生させる事が可能なようなので、

>Randomize
>r = Int(255 * Rnd)   '// 0 から 255 までの乱数を発生。赤。
>g = Int(255 * Rnd)   '// 緑
>b = Int(255 * Rnd)   '// 青

ですと Randomize ステートメントで偶然同じシード値をセットしてしまった場合、
前回のr、g、b と同じ値を返す事になってしまいそうですね。

とはいえ Randomize を連発しているコード例も見ないので
そこまで余り気にする必要もないのかもしれません。
曖昧な知識で申し訳ないです。

【29202】Re:Randomizeステイトメントについて教え...
お礼  ちくたく  - 05/9/27(火) 16:24 -

引用なし
パスワード
   小僧 さん

こんにちは。
いろいろ教えてもらってありがとうございます。

乱数って難しいとか聞いたことがあったけど、
モンテカルロ法とかそんな名前を聞いたことしかなかったので、
なんか、馴染みがないです。
ちょっと、勉強してみようかなとも思います。

>>Randomize
>>r = Int(256 * Rnd)   '// 0 から 255 までの乱数を発生。赤。
>>g = Int(256 * Rnd)   '// 緑
>>b = Int(256 * Rnd)   '// 青

これは、VBAからIllustratorに投げるスクリプトで、
色設定のために作ったものですが、
一応、r, g, bそれぞれ異なる値になります。

これは、ステイトメントの内部(←表現が変?)
に、Rnd関数が見られた場合は、
異なる種が投げられると思えばいいのかもしれないな、
と自分では、勝手に思っています。

Randomizeステイトメントを開始した時点で、
種は固定されない?かな、と一応、自分なりの結論です。
(間違っているかもしれませんが、間違っていたら教えてください!)

9128 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free