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

はじめに
エクセル関数のみで、記入した数字や文字列をランダムに並び替え、振り分けする方法を紹介します。
下にテンプレート(セルデータサンプル)があるので、
できること
データ(文字列や数字の配列)から、ランダムに選ばれたものが出力セルに表示されます。
出力セル数を変えることで、以下に応用できます。
- 出力セル数が 少ない 場合: 抽出(抽選)
- 出力セル数が データ数と同じ 場合: 並び替え・振り分け(席替えなど)
エクセルでの算出方法
以下の 全セルをコピー
ボタンをクリックし、エクセルの A1
セルに貼り付けると、 G
~ I
列に出力されます。
使用する元データを変更したい場合は、 A
列のデータを書き換え、 B
~ C
列の行数をコピー(オートフィル)で増やすか、
出力セルの変更は以下の通りにしてください。
- セル数の変更:
G3
セル(またはそれより右下の関数の入ったセル)をコピー(オートフィル)で増やす / 削除で減らす- ※ データ数を超える場合は、エラー値(
#N/A
)が入るようになる。
- ※ データ数を超える場合は、エラー値(
- セル配置の変更:
G3
セルより右下(G
列目以降かつ3
行目以降)に配置する。行数や列数、配置形状は自由。
振り分け
欄のラベル(グループ1
~ グループ3
)は、
乱数の再生成
一定の操作を行う(ファイルを開き直すなど)と、乱数が再生成されます。
(乱数の強制再生成:F9
キー)生成された乱数を固定する場合は、以下のいずれかを行ってください。
- コピー & "値のみ"の貼り付け (Ctrl + Shift + v)
- 上部メニューの
数式
>計算方法の設定
>手動
を選択
(ただし、すべての関数の自動計算が無効になる)
算出手順
大まかな処理の工程は、以下の通りです
0
~1
の(小数を 含む)乱数を生成0
~行数
の(小数を 含まない(整数))乱数に変換- 2の値の順に、データを表示
1. 0~1の乱数を生成
RAND()
関数を使い、0 ~ 1の乱数を生成します。
- 最小値 : 0.0
- 最大値 : 1.0(厳密には1.0より小さい)
- 出力場所:
B
列
0以上1未満の乱数を返す。
2. 0~行数の整数に変換
=RANK.EQ()
関数を使い、
- 最小値 : 0
- 最大値 :
B
列の行数 - 2 - 出力場所:
C
列
数値
, 参照
, 順序
)参照
範囲の中で、数値
が何番目に大きいのか(or 小さいのか)ランクを表示する。
同じ数値の場合は、最上位ランクが返される
(例:3位と4位の値が同じ → 2つの3位を返す)。
数値
参照
順序
0
: 降順、0
以外:昇順。(省略時 0
)3. 2の値の順に、データを表示
手順2のランダムな整数の順に従って、データを表示します。
少し複雑な式となっていますが、以下の流れで計算しています。
- i .
COUNTA
関数で、G3
~ セル自身の 直前までに表示されているデータの個数 を取得- ※
G
列より前と1
,2
行目の個数は差っ引いて、G3
セルより右下のデータ数を算出
- ※
- ii .
MATCH
関数で、ランダムな整数(C
列)と 各セルの 直前までに表示されているデータの個数 を紐づけ - iii.
INDEX
関数で、紐づいたデータを表示
配列1
, 配列2
, ... )指定した 配列1
の データ(空白セル以外)の個数をカウント する。
配列2
, 配列3
, ... を追加することで、評価に用いるデータを増やすことができる(最大 : 配列255)。
配列1
配列2
検査値
, 検査範囲
, 照合の種類
)指定した検査範囲
の中を検索し、最初に検査値
に マッチしたセルの相対位置を返す。
検査値
検査範囲
照合の種類
0
:完全一致でマッチ、1
:検査値
以下の最大値にマッチ、-1
:検査値
以上の最小値にマッチ)。配列
, 行番号
, 列番号
)配列
範囲の中で、行番号
の位置の値を返す
(配列
が2次元の場合、行番号
列番号
の位置の値を返す)。
配列
行番号
配列
から抽出する要素の行番号。列番号
配列
から抽出する要素の列番号。