【エクセルVBA】重複しない乱数作成と指定範囲をランダム表示(Rnd)

投稿者: | 2021年3月26日
excelアイコン

エクセルバージョン

マイクロソフト365

 

本日はエクセルVBAで重複しない乱数の作成指定範囲をランダムに並び替えを実施してみたいと思います。

それではいってみましょう(*´∀`)

 

乱数の初期化

Randomize ステートメント

Rnd関数の乱数ジェネレーターを初期化します。

乱数を作成する際は下記の1文を記述します。

Randomize

 

乱数の作成

まずは今回の要となる乱数を取得しないといけないので、下記1文で乱数を作成します。

Int((上限値 – 下限値 + 1) * Rnd + 下限値)

 

それでは次にVBAで実際に記述していきます。

 

VBAサンプル

今回は乱数系で、きっと悩まれるであろう2パターンをご紹介していきたいと思います(*^^)v

重複しない乱数2パターン

➀単純に重複しないランダムな数値を作成

➁指定範囲を重複なしのランダムに並び替える

コピペで即、試せますので是非実行してみてください(*゚▽゚)ノ

実行方法が分からない場合 → マクロ実行方法

 

数を指定して重複しないランダムな数字を作成

定数のMAXINTを変更すれば、作成したい乱数の数を指定できます(初期値は5)

A列に1~5の重複しないランダムな数字が作成されます。

全てコピペ(*゚▽゚)ノ

【実行後】

指定したデータ数の重複しないランダムデータが作成されます\(^^)/

Rnd2

【解説】

こちらの考え方は下記になります。

乱数作成

書き込んだ配列要素を末尾の配列要素で上書き

末尾の配列を削除

これを配列分繰り返すことにより配列が1つずつ削除されて重複しないデータができあがります。

いたってシンプルな考え方だと思います(^O^)

 

これは私には難しい!という方下記のようなやり方もあります。

関数で30秒で作成したい場合は → 【関数】重複しない乱数を作成

 

指定範囲を重複なしのランダムに並び替える

指定範囲を並び替えると元データがなくなってしまうので、今回はA列のデータをB列にランダムに並び替えしたいと思います。

定数で開始行と列を指定できます。

全てコピペ(*゚▽゚)ノ

【実行後】

A列の元データからB列に重複しないようにランダムに並び替えができます\(^^)/

Rnd

【解説】

まずはデータ範囲の指定をします。

 

今回の重複しないランダムな並び替えの考え方は下記になります。

乱数作成

書込みしたら配列要素を1にする

すでに書き込まれた値(配列要素が1)だったらループさせて書き込まない

この1連の処理で重複させずにランダムに並び変わります。

 

応用

【エクセルVBA】英単語をランダムに表示させて学習

 

まとめ

これで何か重複なしのランダムデータを作成したい場合、今回のコードを参考にして頭をフル回転させて考えれば何でも作成できます(^^)

今回は乱数系できっと作成時に悩まれるであろうパターンを2つVBAサンプルで作成してみました。

乱数はその他にも作成の方法がありますが今回の方法が一番簡単だと思うので、忘れた場合はコピペしてご自身でデバッグして動きを確認してみてください。

以上です。