エクセル関数で重複しない乱数のシンプルな生成方法(範囲指定可能)【コピペ用テンプレートあり】

はじめに
エクセル関数のみで、重複のない乱数を生成するシンプルな方法 を紹介します。
下にテンプレート(セルデータサンプル)があるので、
生成できる値
生成したい値の
- 最小値
- 小数部桁数
を指定できます。
たとえば、下記のテンプレートでは、
エクセルでの算出方法
以下の 全セルをコピー
ボタンをクリックし、エクセルの A1
セルに貼り付けると、 G
列に乱数が出力されます。
生成する乱数の 最小値 や 小数部桁数 を変更したい場合は、 B2
~ B3
セルの値を変更してください。 E
~ G
列の行数をコピー(オートフィル)で増やしてください。
出力される乱数の範囲は、A7
~ C7
セルに表示されます。
乱数の再生成
一定の操作を行う(ファイルを開き直すなど)と、乱数が再生成されます。
(乱数の強制再生成:F9
キー)生成された乱数を固定する場合は、以下のいずれかを行ってください。
- コピー & "値のみ"の貼り付け (Ctrl + Shift + v)
- 上部メニューの
数式
>計算方法の設定
>手動
を選択
(ただし、すべての関数の自動計算が無効になる)
A | B | C | D | E | F | G | H | |
1 | 設定 | 乱数 | ||||||
2 | 最小値 | 10 | 0~1 | 整数 (1~行数) | 変換後 | |||
3 | 小数部桁数 | 1 | =RAND() | =RANK.EQ(E3,E:E) | =(F3-1)*10^(-$B$3)+$B$2 | |||
4 | =RAND() | =RANK.EQ(E4,E:E) | =(F4-1)*10^(-$B$3)+$B$2 | |||||
5 | ↓ | =RAND() | =RANK.EQ(E5,E:E) | =(F5-1)*10^(-$B$3)+$B$2 | ||||
6 | 変換後の値 | =RAND() | =RANK.EQ(E6,E:E) | =(F6-1)*10^(-$B$3)+$B$2 | ||||
7 | =MIN($G:$G) | ~ | =MAX($G:$G) | =RAND() | =RANK.EQ(E7,E:E) | =(F7-1)*10^(-$B$3)+$B$2 | ||
8 | =RAND() | =RANK.EQ(E8,E:E) | =(F8-1)*10^(-$B$3)+$B$2 | |||||
9 | =RAND() | =RANK.EQ(E9,E:E) | =(F9-1)*10^(-$B$3)+$B$2 | |||||
10 | =RAND() | =RANK.EQ(E10,E:E) | =(F10-1)*10^(-$B$3)+$B$2 | |||||
11 | =RAND() | =RANK.EQ(E11,E:E) | =(F11-1)*10^(-$B$3)+$B$2 | |||||
12 | =RAND() | =RANK.EQ(E12,E:E) | =(F12-1)*10^(-$B$3)+$B$2 |
算出手順
大まかな乱数の生成工程は、以下の通りです
0
~1
の(小数を 含む)乱数を生成1
~行数
の(小数を 含まない(整数))乱数に変換- 設定した 最小値 と 小数部桁数 に合うようにスケーリング
1. 0~1の乱数を生成
RAND()
関数を使い、0 ~ 1の乱数を生成します。
- 最小値 : 0.0
- 最大値 : 1.0(厳密には1.0より小さい)
- 出力場所:
E
列
RAND関数
0以上1未満の重複しない乱数(小数を含む)を返す。
例:
=RAND()
2. 1~行数の整数に変換
=RANK.EQ()
関数を使い、
- 最小値 : 1
- 最大値 :
E
列の行数 - 2 - 出力場所:
F
列
RANK.EQ関数
第2引数の範囲のデータ列中で、第1引数のデータが何番目に位置するかを算出。
同順位の場合は、同順位内の最上位の値が返される。
第3引数は0または1で、降順または昇順のどちらで順位付けするかを設定
(今回はどちらでも可)。例:
=RANK.EQ(E3,E:E)
- 第1引数 (
E3
): 順位付けするデータ- 第2引数 (
E:E
): 順位付けするデータ列の全体範囲- 第3引数 : 降順(
0
) or 昇順(1
) を設定(省略時は降順)
3. 設定に合うようにスケーリング
手順2の乱数(整数値)を、
- 最小値 :
B2
セルの値 - 最大値 :
B2
セルの値 + (E
~F
列の行数 - 2) - 出力場所:
G
列