Excel にて、次のような処理をしたい時がある。(列記したが意味は同じである。)
- 2つ以上の列にわたる範囲を1つの列に変換したい
- 多次元配列を一次元配列に直したい
- Google スプレッドシートの FLATTEN 関数に相当する処理を行いたい
このような時は、TOCOL 関数を使う。
=TOCOL(A1:D4)

TOCOL 関数を使わずに INDEX 関数を利用する場合は、次のような数式になる。
=LET(
area, A1:D4,
rows, ROWS(area),
cols, COLUMNS(area),
total, rows * cols,
seqArr, SEQUENCE(total),
rowIndex, INT((seqArr - 1) / cols) + 1,
colIndex, MOD(seqArr - 1, cols) + 1,
INDEX(area, rowIndex, colIndex)
)
ちなみに、行列の対角成分だけを抜き出す場合は、次のような数式になる。
=LET(
area, A1:D4,
size, ROWS(area),
seqArr, SEQUENCE(size),
index, INT((seqArr - 1)) + 1,
INDEX(area, index, index)
)
INDEX 関数と SEQUENCE 関数を用いた並び替えについては、「INDEX 関数と SEQUENCE 関数を用いた並び替え」という記事に書いた。
以上