エクセルでランダム並び替え/振り分け(抽選・席替えに)【テンプレートあり】

はじめに
エクセル関数のみで、記入した数字や文字列をランダムに並び替え、振り分けする方法を紹介します。
下にテンプレート(セルデータサンプル)があるので、
できること
データ(文字列や数字の配列)から、ランダムに選ばれたものが出力セルに表示されます。
出力セル数を変えることで、以下に応用できます。
- 出力セル数が 少ない 場合: 抽出(抽選)
- 出力セル数が データ数と同じ 場合: 並び替え・振り分け(席替えなど)
エクセルでの算出方法
以下の 全セルをコピー ボタンをクリックし、エクセルの A1 セルに貼り付けると、
使用する元データを変更したい場合は、
出力セルの変更は以下の通りにしてください。
- セル数の変更: 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次元の場合、行番号
列番号
の位置の値を返す)。
配列
行番号
配列
から抽出する要素の行番号。列番号
配列
から抽出する要素の列番号。関連記事











