配列を行単位でシャッフル・ランダム並べ替えをする計算式

配列を行単位でシャッフル・ランダム並べ替えをする計算式

Excelで配列を行単位でシャッフルする方法として、計算式を使用することができます。次に案内する計算式使用することで、行の順序をランダムに並べ替えることが可能です。以下では、この計算式の使い方と構造について詳しく解説します。

計算式の概要

以下の計算式は、配列の行をランダムな順序で並べ替えるために使用できます。各部分の動作について以下に説明します。

=SORTBY(配列, RANDARRAY(ROWS(配列), 1))

また、「配列」の指定を一度で済ますならば、LET関数で下記のように書き換えることもできます。効果はどちらでも同じです。

=LET(_Array,配列,SORTBY(_Array,RANDARRAY(ROWS(_Array),1)))

具体的には以下のように使用します。以下のサンプルはシャッフル対象の配列を「A2:C13」としています。どちらでも同じ効果が発生します。詳しくは次節以降で解説します。

=SORTBY(A2:C13,RANDARRAY(ROWS(A2:C13),1))
=LET(_Array,A2:C13,SORTBY(_Array,RANDARRAY(ROWS(_Array),1)))

SORTBY関数

SORTBY関数は、指定したキーに基づいて配列を並べ替える関数です。この関数は、第一引数に並べ替え対象の配列を取り、第二引数に並べ替えの基準となる配列を取ります。基準となる配列の値に従って、第一引数の配列が並べ替えられます。今回は、RANDARRAY関数で生成されたランダムな数値を基準として使用するため、配列の行がランダムな順序に並べ替えられます。

RANDARRAY関数

RANDARRAY関数は、指定された行数と列数に基づいてランダムな数値の配列を生成する関数です。引数には行数と列数を指定します。今回の例では、ROWS(配列)で配列の行数を取得し、その行数分のランダムな数値を生成するために使用します。これにより、配列の各行に対応するランダムな数値が生成されます。

ROWS関数

ROWS関数は、指定された範囲の行数を返します。例えば、ROWS(A2:C13)は、範囲A2:C13の行数である12を返します。この関数を使用することで、RANDARRAY関数の引数として配列の行数を動的に取得し、適切なサイズのランダム数値の配列を生成することができます。

具体例

以下に具体例を示します。下記の表(A1:C13)の2行目以下(A2:C13)をシャッフルする式を考案します。

書籍番号書名金額
1001ケーススタディ民法1400
1002交通六法2700
1003法人税法の基礎2700
1004会社法2800
1005民法総則2700
1006判例六法2400
1007基礎法入門2500
1008やさしい経済法2500
1009刑法各論2100
1010現近代民法1400
1011会社法概論2000
1012商法総則1900

基本の式は

=SORTBY(配列, RANDARRAY(ROWS(配列), 1))

でしたから、

=SORTBY(A2:C13, RANDARRAY(ROWS(A2:C13), 1))

となります。セルE2でSORTBY関数を立ち上げます。

「配列」は見出し行をのぞいたA2:C13となります。続けて「基準配列1」へRANDARRAY関数を組み込みます。

縦に展開させる乱数配列の場合は、「列:1」とします。ただしこれは省略可能です。次に「行」へROWS関数を組み込みます。

調べる配列の高さを指定します。A2:C13です。

RANDARRAY関数の引数を確認すると下図のようになっています。

大元のSORTBY関数の引数を確認すると以下のようになっています。確認後はOKで確定します。

行がシャッフルされました。{F9}キーを押すと再計算によりシャッフルし直しがされます。

行単位で配列をランダムシャッフルする計算式の完成例

行単位で配列をランダムシャッフルする計算式の完成例

行シャッフル計算式をコピペで簡単に利用する

LET関数を利用した以下の式ではより簡単に導入が可能です。

=LET(_Array,配列,SORTBY(_Array,RANDARRAY(ROWS(_Array),1)))

式を出力したいセルへ貼り付け、「関数の挿入」(fx)をクリックします

「名前値1」の「配列」を対象範囲に変更します。

ここではA2:C13へ変更してOKします。行単位でシャッフルされます。

 

コメント