2025/5/3

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

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

はじめに

エクセル関数のみで、重複のない乱数を生成するシンプルな方法 を紹介します。 生成する乱数の範囲が比較的狭い場合(パターンが数千個程度)に有効な方法です。 バージョン2021、365より前のバージョンでも動作します。

下にテンプレート(セルデータサンプル)があるので、 コピペですぐに使用できます。

生成できる値

生成したい値の

  • 最小値
  • 小数部桁数

を指定できます。 行を増やすことで生成する乱数の 最大値個数 を増やせます。

たとえば、下記のテンプレートでは、 10.0 ~ 10.9の範囲(小数部桁数1)で、 10個の乱数を重複なしで取得できます。

エクセルでの算出方法

以下の 全セルをコピー ボタンをクリックし、エクセルの A1 セルに貼り付けると、 G列に乱数が出力されます。

生成する乱数の 最小値小数部桁数 を変更したい場合は、 B2 ~ B3セルの値を変更してください。 出力する乱数の 最大値個数 を増やす場合は、 E ~ G列の行数をコピー(オートフィル)で増やしてください。

出力される乱数の範囲は、A7 ~ C7セルに表示されます。

乱数の再生成

一定の操作を行う(ファイルを開き直すなど)と、乱数が再生成されます。
(乱数の強制再生成:F9キー)

生成された乱数を固定する場合は、以下のいずれかを行ってください。

  • コピー & "値のみ"の貼り付け (Ctrl + Shift + v)
  • 上部メニューの 数式 > 計算方法の設定 > 手動 を選択
    (ただし、すべての関数の自動計算が無効になる)
ABCDEFGH
1設定乱数
2最小値100~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

算出手順

大まかな乱数の生成工程は、以下の通りです

  1. 0 ~ 1 の(小数を 含む)乱数を生成
  2. 1 ~ 行数 の(小数を 含まない(整数))乱数に変換
  3. 設定した 最小値小数部桁数 に合うようにスケーリング

1. 0~1の乱数を生成

RAND()関数を使い、0 ~ 1の乱数を生成します。

  • 最小値 : 0.0
  • 最大値 : 1.0(厳密には1.0より小さい)
  • 出力場所:E

RAND関数

0以上1未満の重複しない乱数(小数を含む)を返す。

例:=RAND()

2. 1~行数の整数に変換

=RANK.EQ()関数を使い、 手順1の乱数(小数を 含む )を整数(小数を 含まない )に変換します。

  • 最小値 : 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) ×10B3セルの値\times 10^{\rm B3セルの値}
  • 出力場所:G