[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『-9から9までの間で乱数』(ゴンタ)
お世話になります 100〜200までの乱数は
Sub 乱数100から200() Randomize Dim ransuu ransuu = Int(Rnd * 101) + 100 End Sub
で取得できますが マイナス9 〜 プラス9までの乱数取得方法をお教え下さい 宜しくお願いします
< 使用 Excel:Excel2003、使用 OS:WindowsXP >
こんな感じですか? Sub ランダム() Dim a(1 To 100) Dim i As Long Randomize For i = 1 To 100 a(i) = Int(Rnd * 19) - 9 Next i Range("A1").Resize(100).Value = Application.Transpose(a) End Sub (稲葉) 2014/09/20(土) 08:02
稲葉さん 返信有難う御座います
Int(Rnd * 19) - 9 ~~ ~~~ で、どうして プラス9〜マイナス9 になるのか 私には意味不明ですが、よ〜く考えて見ます
助かりました。有難う御座います」 (ゴンタ) 2014/09/20(土) 16:51
2003 で RANDBETWEEN はアドインで分析ツールの登録が必要ですね。 (Mook) 2014/09/20(土) 18:15
Rnd関数の値の範囲は、
0 <= Rnd < 1 であることが基本ですよ!! 不等式は、3辺への同じ正の数の加減乗除では、不等式は変わらない ので、
3辺に19を掛けると、
0 <= Rnd * 19 < 19
0 <= int(Rnd*19) <19 これで int(Rnd*19)は、0〜18の整数を取得します。
更に 3辺から 9を引く
-9 <= int(Rnd*19) - 9 < 10 これで int(Rnd*19) - 9 は、-9 〜 10未満の整数(9以下の整数)
ですね!!
尚、RandBetweenの場合、 RandBetWeen(-9,9) でOKです。
( ichinose) 2014/09/22(月) 07:09
ヘルプで「Rnd」を見ると、こんな風になっていますね。
>任意の範囲の整数の乱数を生成するには、次の式を使ってください。 >Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
と言うことは、途中まで整数(4158±2000)で処理して、出来上がりを1000で割ればいいかも。
<10個の場合>
行 __A__ ___B___ 1 4.296 差 2 3.655 0.641 3 2.788 0.867 4 2.21 0.578 5 2.831 -0.621 6 3.681 -0.85 7 4.5 -0.819 8 5.472 -0.972 9 4.495 0.977 10 5.086 -0.591
Sub LimitedRand() Dim rndNum(1 To 10, 1 To 1) '10個作成
Dim Ubnd As Long Dim Lbnd As Long
Dim LimitAry Dim gaugeAry
Dim preRnd As Long Dim NN As Long Dim found As Boolean
Randomize
preRnd = 4158 Ubnd = preRnd + 2000 Lbnd = preRnd - 2000 gaugeAry = Array(False, True, False, True, False) '妥当性判定用
preRnd = Int((Ubnd - Lbnd + 1) * Rnd + Lbnd) '1個目の整数乱数を作成
rndNum(1, 1) = preRnd / 1000 '1個目格納 found = False
For NN = 2 To UBound(rndNum) LimitAry = Array(0, preRnd - 1000, preRnd - 499.5, preRnd + 500, preRnd + 1000.5) Do Until found preRnd = Int((Ubnd - Lbnd + 1) * Rnd + Lbnd) found = Application.Lookup(preRnd, LimitAry, gaugeAry) Loop
rndNum(NN, 1) = preRnd / 1000 found = False
Next NN
Range("A1:A10").Value = rndNum 'シートに転記 End Sub
(半平太) 2016/08/03(水) 21:07
初心者なので、教えて下さい。
rndnum(1 to 10,1 to 1) の、意味を教えて下さい。
1 to 10 は、10個なのは、理解できました。
となりの 1 to 1 が、分かりません。
あと、上記の4.158以外に -47665.645 と -8153.498 という数値で同じように作成するのですが同じようにすれば作成出来ますか?
試しに、4.158を-47665.645に変更して見ましたが無理でした。
(マクロ初心者) 2016/08/03(水) 23:11
>rndnum(1 to 10,1 to 1) の、意味を教えて下さい。 >となりの 1 to 1 が、分かりません。
横が1次なので無意味に近いですが、それでも形上、2次元配列にしておけば、 エクセルのシートと親和性が高くなり、縦方向に書出す時、何の工夫も要らなくなる為です。
>あと、上記の4.158以外に -47665.645 と -8153.498 という数値で同じように作成するのですが同じようにすれば作成出来ますか? >試しに、4.158を-47665.645に変更して見ましたが無理でした。
-47665.645 ですかぁ! 当初のサンプルと随分趣が異なりますね。
(1) preRnd = 4158 ↓へ変更 preRnd = -47665645
(2) LimitAry = Array(0, preRnd - 1000, preRnd - 499.5, preRnd + 500, preRnd + 1000.5) ↓へ変更 LimitAry = Array(-9999999999, preRnd - 1000, preRnd - 499.5, preRnd + 500, preRnd + 1000.5)
<結果例> 行 _____A_____ ___B___ 1 -47,664.507 差 2 -47,665.333 0.826 3 -47,664.631 -0.702 4 -47,665.600 0.969 5 -47,665.052 -0.548 6 -47,665.689 0.637 7 -47,664.749 -0.94 8 -47,665.680 0.931 9 -47,666.197 0.517 10 -47,665.449 -0.748
(半平太) 2016/08/04(木) 00:13
preRnd = Int((Ubnd - Lbnd + 1) * Rnd + Lbnd) '1個目の整数乱数を作成
↑ここで、1個しか取得していないのが理由ですか?↓
Range("A1:A10").Value = rndNum 'シートに転記 ↑を、試しに、変更してみましたが初めの1列目で取得した乱数と同じになりました。
自分で、アレンジしようと頑張ったのですがまだまだ勉強が足らないようです。
( マクロ初心者) 2016/08/04(木) 15:19
ちょっと、私には仕様が理解できないので、他の回答者のレスが付くのを待ってください。
(半平太) 2016/08/04(木) 17:24
(2年前のスレが上がっててビックリのゴンタ) 2016/08/05(金) 00:05
また、上記を試してみたのですが
A1:A23 に、入った乱数とまったく同じ内容でB1:B23,C1:C23・・・・AB1:AB23の中に入ってしまうのです。
違う内容の乱数にしたいのですが無理なのでしょうか?
(マクロ初心者) 2016/08/05(金) 00:35
基準値 4.158 プラマイ2 と、言うのは変更ありません。
例えば、1日目の最大値が 5.158 だとします。
初期値との差は、1.0 です。
2日目は、前日との差はプラマイ1.0なので5.158+0.5〜5.158+1.0(上限が、6.158なので。)
もしくは、4.658−0.5〜4.158−1.5 の間になるようにします。
3日目は、その数値に、−0.5したものから−1.0,+0.5したものから+1.0の間になるように
するコードが知りたいです。
4.658〜5.658〜6.158〜5.158〜4.158〜3.158〜3.658〜4.658〜
と、いうのうなイメージです。
↑絶対値での最大値なのでこれを基準に最大値と最小値を求めていけば
解決できるかなと思ったのですが。
そして、グラフ作成時にプラマイ0点が、4.158をイメージして上行ったり下行ったりゆらゆら
した感じのグラフが良いです。
(マクロ初心者) 2016/08/05(金) 18:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.