Excelで矩形型の二次元配列をシャッフルする計算式

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)))
矩形型の二次元配列をシャッフルするExcel計算式の例

矩形型の二次元配列をシャッフルするExcel計算式の例

各部分の動作について以下に詳しく説明します。

シャッフル計算に使われる各関数の役割

TOCOL関数

TOCOL関数は、指定した配列を1列に変換します。これにより、矩形型の配列全体が1列の配列に変換されます。

TOCOL(A1:D5)

例えば、以下のような配列があった場合:

AppleBananaOrangeStrawberry
BlueberryRaspberryPineappleMango
PeachPearWatermelonMelon
GrapeKiwiCherryLemon
LimeGrapefruitPlumPomegranate

これを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))

これにより、ランダムに並べ替えられたデータが再び元の形状(行数と列数)に戻ります。

計算式全体の流れ

この計算式処理全体の流れは以下の通りです。ただし関数の設定は外側の関数、つまり下の処理から登録していきます

  1. TOCOL関数で配列を1列に変換する。
  2. RANDARRAY関数でランダムな数値の配列を生成する。
  3. SORTBY関数でランダムな順序に並べ替える。
  4. WRAPCOLS関数で再び元の行数に整形する。

このようにして、配列内の要素をランダムにシャッフルし、再度矩形型に整形することができます。

LET関数のひな型で処理を完了させる

=LET(_Array,配列,WRAPCOLS(SORTBY(TOCOL(_Array),RANDARRAY(ROWS(TOCOL(_Array)))),ROWS(_Array)))

上記のLET関数で加工した計算式ならば、式をコピーペーストして素早く処理を登録できます。作成したい場所でコピペしてから「関数の挿入」(fx)をクリックします。

第二引数の「名前値1:配列」へ分析元の配列を登録します。上記の例ではA1:D5です。

あとはOKすればシャッフルされます。またF9キーで再シャッフルされます。

 

コメント