質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2512閲覧

配列へ指定数字を指定割合でランダム代入

qwertyuiop12345

総合スコア11

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2015/10/05 04:01

vbもしくはvbaを使用してプログラミングをしています。
配列に指定の数字を指定の割合でランダムに代入したく、色々と考えております。
しかしながら、なかなか考えが出てこない状況なので、質問させていただきました。
もしわかる方がおりましたら、アドバイス頂けると幸いです。

■例えば
A(0)~A(9)という配列があった場合
0を3個(30%)、1を5個(50%)、2を2個(20%)
と、A(0)~A(9)の配列にランダムで代入。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

最初に所定の数だけ数字を入れて,あとからシャッフルすればいいのではないでしょうか.
シャッフルの手法は
0. 0-9の整数の乱数を発生させる
0. 選ばれた数字のインデックスにある要素を末尾(最初は9の位置)と入れ替える
0. 1.と2.を繰り返す.ただし,ループ毎に1.で発生させる乱数の上限を1下げ,2.で入れ替える対象の位置の番号を1下げる(2周目は0-8の乱数を出し,8の位置と入れ替え)
これが一番早くて均一にシャッフルできます.

投稿2015/10/05 04:18

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwertyuiop12345

2015/10/05 04:30

ありがとうございます。 参考になりました。
guest

0

ベストアンサー

大きく分けて2パターンが考えられるのですが、どちらの実装が好ましいでしょうか。

  • 「0が3つ、1が5つ、2が2つ」というのは常に共通で、順番だけシャッフルする
  • 本当に確率的に入れていくので、1回ごとには個数が変動しうる

前者の場合、(0, 0, 0, 1, 1, 1, 1, 1, 2, 2)という配列を作っておいて、このようなアルゴリズムでシャッフルすれば、目的の配列を作れます。

後者の場合は、Rndの値によって返り値が変わる関数を作っておいて、それを10回呼び出すことで配列を埋める感じです。

投稿2015/10/05 04:11

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwertyuiop12345

2015/10/05 04:30

ありがとうございました。 前者のほうがイメージにピッタリでした。
guest

0

"シャッフル アルゴリズム" で検索してみると、いろいろヒットしました。

以下のサイトなど、分かりやすくて参考になるかも知れません。
http://ppp-lab.sakura.ne.jp/ProgrammingPlacePlus/algorithm/other/002.html

要は、以下のような配列に対して"Fisher-Yates shuffle"を適用してやれば良いのかと思います。

{0, 0, 0, 1, 1, 1, 1, 1, 2, 2};

投稿2015/10/05 04:11

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwertyuiop12345

2015/10/05 04:31

ありがとうございました。 参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問