1~Num の整数を、重複なしでランダムに並べ替えた一次元配列を返す汎用プロシージャ Excel VBA
- yuji fukami
- 1 日前
- 読了時間: 2分

<概要 (ランダム順生成)>
MakeRand123Array1D(Num) は、1~Num の整数を、重複なしでランダムに並べ替えた一次元配列を返す関数です。「抽選番号の作成」「ランダムな処理順の決定」「テストデータのシャッフル」などで、そのまま使えます。
入力:要素数 Num
出力:(1 To Num) の一次元配列(中身は 1~Num の並び替え)
例:Num=10 → [4,6,2,7,8,1,3,5,10,9]
仕組み(何をしているか)
処理は大きく2段階です。
Rnd() で 0~1 の乱数を Num 個作り、一次元配列に格納
その乱数配列を GetRankArray1D に渡し、「小さい順(または大きい順)に並べたときの順位」= 1~Num の並び順に変換する
つまり、乱数そのものを返すのではなく、「乱数の大小関係」から 重複しない順位(=1~Num)を作って返す、という設計です。
<実行例>
実行例のサンプルコードは次の通りです
実行結果のイミディエイトウィンドウは次のようになります。

上記は実行サンプルを5回実行していますが、指定の10個分の重複のない数字をランダムな順番で出力されているのが確認できます。
<関連コード>
今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。
・GetRankArray1D→ https://www.softex-celware.com/post/getrankarray1d
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。



コメント