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)
  • 上部メニューの 数式 > 計算方法の設定 > 手動 を選択
    (ただし、すべての関数の自動計算が無効になる)
ABCDEFG
1設定乱数
2最小値100~1整数 (1~行数)変換後
3小数部桁数10.353510.4
40.356410.3
5 ↓0.148810.7
6変換後の値0.288710.6
710~10.90.902110
80.09910.8
90.0241010.9
100.339610.5
110.606210.1
120.405310.2

算出手順

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

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

1. 0~1の乱数を生成

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

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

0以上1未満の乱数を返す。

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

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

  • 最小値 : 1
  • 最大値 : E列の行数 - 2
  • 出力場所:F
fxRANK.EQ関数
RANK.EQ ( 数値, 参照, 順序)

参照範囲の中で、数値が何番目に大きいのか(or 小さいのか)ランクを表示する。 同じ数値の場合は、最上位ランクが返される (例:3位と4位の値が同じ → 2つの3位を返す)。

数値
: 必須
A2
評価する数値。
参照
: 必須
A$2:A$6
ランク付けする範囲。
順序
: 任意
1
ランク付け方向を設定する数値。0 : 降順、0以外:昇順。(省略時 0

3. 設定に合うようにスケーリング

手順2の乱数(整数値)を、 設定値( 最小値 , 小数部桁数 )に合うようにスケーリングします。

  • 最小値 : B2セルの値
  • 最大値 : B2セルの値 + (E~ F列の行数 - 2) ×10B3セルの値\times 10^{\rm B3セルの値}
  • 出力場所:G