Excelで矩形型の二次元配列をシャッフルする計算式
計算式の概要
以下の計算式は、矩形型の二次元配列内のデータを行ごとにランダムに並べ替えるために使用されます。
=WRAPCOLS(SORTBY(TOCOL(配列),RANDARRAY(ROWS(TOCOL(配列)))),ROWS(配列))
配列の指定を一度で済ます場合は以下の式になります。上の式と同じ動作をします。
=LET(_Array,配列,WRAPCOLS(SORTBY(TOCOL(_Array),RANDARRAY(ROWS(TOCOL(_Array)))),ROWS(_Array)))
配列をA1:D5
とした場合は以下のいずれかとなります。
=WRAPCOLS(SORTBY(TOCOL(A1:D5),RANDARRAY(ROWS(TOCOL(A1:D5)))),ROWS(A1:D5))
=LET(_Array,A1:D5,WRAPCOLS(SORTBY(TOCOL(_Array),RANDARRAY(ROWS(TOCOL(_Array)))),ROWS(_Array)))
各部分の動作について以下に詳しく説明します。
シャッフル計算に使われる各関数の役割
TOCOL関数
TOCOL関数は、指定した配列を1列に変換します。これにより、矩形型の配列全体が1列の配列に変換されます。
TOCOL(A1:D5)
例えば、以下のような配列があった場合:
Apple | Banana | Orange | Strawberry |
Blueberry | Raspberry | Pineapple | Mango |
Peach | Pear | Watermelon | Melon |
Grape | Kiwi | Cherry | Lemon |
Lime | Grapefruit | Plum | Pomegranate |
これを1列に変換すると、次のようになります:
Apple Banana Orange Strawberry Blueberry Raspberry Pineapple Mango Peach Pear Watermelon Melon Grape Kiwi Cherry Lemon Lime Grapefruit Plum Pomegranate
RANDARRAY関数
RANDARRAY関数は、指定されたサイズのランダムな数値の配列を生成します。ここでは、TOCOL関数で生成された配列の行数と同じサイズのランダムな数値の配列を生成します。配列の行数はROWS関数で調査しています。
RANDARRAY(ROWS(TOCOL(A1:D5)))
SORTBY関数
SORTBY関数は、指定したキーに基づいて配列を並べ替えます。この場合、RANDARRAY関数で生成されたランダムな数値をキーとして使用し、配列をランダムに並べ替えます。
SORTBY(TOCOL(A1:D5), RANDARRAY(ROWS(TOCOL(A1:D5))))
これにより、配列内の要素がランダムな順序で並べ替えられます。
WRAPCOLS関数(完成)
WRAPCOLS関数は、1列に変換されたデータを指定した列数に再フォーマットします。この場合、元の配列の行数を使用して、再度矩形型に整形します。
=WRAPCOLS(SORTBY(TOCOL(A1:D5), RANDARRAY(ROWS(TOCOL(A1:D5)))), ROWS(A1:D5))
これにより、ランダムに並べ替えられたデータが再び元の形状(行数と列数)に戻ります。
計算式全体の流れ
この計算式処理全体の流れは以下の通りです。ただし関数の設定は外側の関数、つまり下の処理から登録していきます。
TOCOL
関数で配列を1列に変換する。RANDARRAY
関数でランダムな数値の配列を生成する。SORTBY
関数でランダムな順序に並べ替える。WRAPCOLS
関数で再び元の行数に整形する。
このようにして、配列内の要素をランダムにシャッフルし、再度矩形型に整形することができます。
LET関数のひな型で処理を完了させる
=LET(_Array,配列,WRAPCOLS(SORTBY(TOCOL(_Array),RANDARRAY(ROWS(TOCOL(_Array)))),ROWS(_Array)))
上記のLET関数で加工した計算式ならば、式をコピーペーストして素早く処理を登録できます。作成したい場所でコピペしてから「関数の挿入」(fx)をクリックします。
第二引数の「名前値1:配列」へ分析元の配列を登録します。上記の例ではA1:D5です。
あとはOKすればシャッフルされます。またF9キーで再シャッフルされます。
コメント