Excel(365限定)データをランダムにグループ分けしたい時

こんにちは。
先日、Excelを受講中の生徒様より、こんな質問をいただきました。
「大量のデータをランダムにグループ分けしたいんだけど、関数を使って一発で楽に作れませんか?」
関数で一発グループ分け、Excelのバージョンが365なら出来ますよ!
ただ、数式の入力は楽ではないかもしれませんが...
バージョン365で使える関数には、
配列を1行(または1列)に並べたりするTOROW(TOCOL)、
列や行を横方向(または縦方向)に折り返すWRAPROWS(WRAPCOLS)、
乱数が入った配列を作成するRANDARRAYなどがあり、
これに、バージョン2021以降から使える関数
データを複数の基準で並べ替えて取り出すSORTBYや
条件に一致する行を抽出するFILTERなどを組み合わせれば、
データをランダムに、希望通りのグループ数で分けることが可能です。
仮に、500件の学生名簿をランダムで5クラスに分けると仮定します。
データは4列501行で、1行目は見出しです。
A列:学籍番号
B列:氏名
C列:ふりがな
D列:性別
A2セルからD501セルをデータ範囲とします。
ランダムなデータを表示したいセル(仮にJ2セル)に以下の式を入力します。

 

=WRAPROWS(TOCOL(SORTBY(FILTER(A2:D501,A2:A501<>""),RANDARRAY(COUNTA(A2:A501)))),20)

 

見ただけでやる気を削がれそうな暗号めいた式が出来上がりましたが、

これを入力しただけで、画面にはランダムに並べ替えられた20列(4列×5クラス分)100行のデータが展開されます。

データは操作する度に並べ替えられてしまうので、このデータ範囲をコピーして、別のシートに貼り付けて使用することになります。

 

この式で何をやっているかというと、

FILTER:空欄を除外したデータを

COUNTA:データの入っている行数分

RANDARRAY:乱数を発生させて

SORTBY:乱数を基準に並べ替えたデータを

 

TOCOL:1列に並べた状態にしたものを

WRAPROWS20(4列1組×5組分)でデータを折り返す、

という作業になります。

単純に500件とデータが決まっていて空白行が存在しなければもう少し簡単な式で済みますが、実務で使う場合には現実的ではないため、

FILTERやCOUNTAを使って、データの件数が500件に満たない場合や空白行を含む場合にも対応できるようにしてあります。

 

クラス分けや席替え、無作為振り分け、営業先の担当振り分け等、ランダムなグループ分けに悩んでいる方はぜひ試してみてくださいね。

もっと詳しく説明して!という方はお気軽にスタッフにお尋ねください♪