2025/5/5

エクセルで指定した値のランダム並び替え/振り分け(抽選や席替えにも使える)【コピペ用テンプレートあり】

Thumbnail for エクセルで指定した値のランダム並び替え/振り分け(抽選や席替えにも使える)【コピペ用テンプレートあり】

はじめに

エクセル関数のみで、記入した数字や文字列をランダムに並び替え、振り分けする方法を紹介します。 重複なく、均等に振り分けられ、抽選や席替えにも使えます。 バージョン2021、365より前のバージョンでも動作します。

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

できること

データ(文字列や数字の配列)から、ランダムに選ばれたものが出力セルに表示されます。

出力セル数を変えることで、以下に応用できます。

  • 出力セル数が 少ない 場合: 抽出(抽選)
  • 出力セル数が データ数と同じ 場合: 並び替え・振り分け(席替えなど)

エクセルでの算出方法

以下の 全セルをコピー ボタンをクリックし、エクセルの A1 セルに貼り付けると、 ランダムに並び替えられたデータが G ~ I列に出力されます。

使用する元データを変更したい場合は、 A列のデータを書き換え、 B ~ C列の行数をコピー(オートフィル)で増やすか、 削除してデータ数に合わせてください。

出力セルの変更は以下の通りにしてください。

  • セル数の変更: G3セル(またはそれより右下の関数の入ったセル)をコピー(オートフィル)で増やす / 削除で減らす
    • ※ データ数を超える場合は、エラー値(#N/A)が入るようになる。
  • セル配置の変更: G3セルより右下(G列目以降かつ 3行目以降)に配置する。行数や列数、配置形状は自由。

振り分け欄のラベル(グループ1 ~ グループ3)は、 自由に書き換えられます。

乱数の再生成

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

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

  • コピー & "値のみ"の貼り付け (Ctrl + Shift + v)
  • 上部メニューの 数式 > 計算方法の設定 > 手動 を選択
    (ただし、すべての関数の自動計算が無効になる)
ABCDEFGHI
1データ乱数乱数(整数)振り分け
2A0.7272グループ1グループ2グループ3
3B0.1586DFC
4C0.6225GEB
5D0.8670A
6E0.6254
7F0.6633
8G0.7671

算出手順

大まかな処理の工程は、以下の通りです

  1. 0 ~ 1 の(小数を 含む)乱数を生成
  2. 0 ~ 行数 の(小数を 含まない(整数))乱数に変換
  3. 2の値の順に、データを表示

1. 0~1の乱数を生成

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

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

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

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

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

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

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

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

3. 2の値の順に、データを表示

手順2のランダムな整数の順に従って、データを表示します。

少し複雑な式となっていますが、以下の流れで計算しています。

  • i . COUNTA関数で、G3 ~ セル自身の 直前までに表示されているデータの個数 を取得
    • G列より前と1, 2行目の個数は差っ引いて、G3セルより右下のデータ数を算出
  • ii . MATCH関数で、ランダムな整数(C列)と 各セルの 直前までに表示されているデータの個数 を紐づけ
  • iii. INDEX関数で、紐づいたデータを表示
fxCOUNTA関数
COUNTA ( 配列1, 配列2, ... )

指定した 配列1データ(空白セル以外)の個数をカウント する。
配列2, 配列3, ... を追加することで、評価に用いるデータを増やすことができる(最大 : 配列255)。

配列1
: 必須
A1:A5
カウントするデータの範囲。
配列2
: 任意
C1:D4
追加で評価するデータの範囲。
fxMATCH関数
MATCH ( 検査値, 検査範囲, 照合の種類)

指定した検査範囲の中を検索し、最初に検査値マッチしたセルの相対位置を返す。

検査値
: 必須
"C"
検索する値(文字列や数値)。
検査範囲
: 必須
A1:A5
検索範囲。
照合の種類
: 任意
0
照合の型を設定する数値0:完全一致でマッチ、1検査値以下の最大値にマッチ、-1検査値以上の最小値にマッチ)。
fxINDEX関数
INDEX ( 配列, 行番号, 列番号)

配列範囲の中で、行番号の位置の値を返す
配列が2次元の場合、行番号 列番号の位置の値を返す)。

配列
: 必須
A1:B5
値を抽出する範囲。
行番号
: 必須
3
配列から抽出する要素の行番号。
列番号
: 任意
2
配列から抽出する要素の列番号。