表形式のデータを1列に取り出して並べる

表形式になっているデータを1列に取り出したいとき、1行ずつコピペすればできますが、データが多くあるときは効率が悪いです。

以下の関数を入れてオートフィルコピーで下方へドラッグすれば楽にできます。




「A1:C4」のような表がE列のように並びます。

0722_1

「E1」に以下の関数を入れたら下方へオートフィルコピーです。

=INDEX($A$1:$C$4,INT((ROW(A1)-1)/3)+1,MOD(ROW(A1)-1,3)+1)

例えばデータが4列だったら範囲選択を変更するのは当然ですが、式途中の「3」のところを「4」へ変更すればそのまま対応できます。
こんな感じ。
=INDEX($A$1:$D$4,INT((ROW(A1)-1)/4)+1,MOD(ROW(A1)-1,4)+1)

・INDEX 取り出したい範囲を指定
・INT((ROW(A1)-1)/4)+1 (行番号-1)/4の結果を整数で切り捨て、プラス1
・MOD(ROW(A1)-1,4)+1 (行番号-1)を4で割った余りを出して、プラス1
INDEXの行指定の部分がINTの結果で、列指定の部分がMODの結果です。

表の範囲が3列ならば、「-1」をしているので、行番号3のところまではいくら「3」で割っても「1」以下になるので、整数で切って答えは「0」、それにプラス「1」をしているので返る値は「1」になる。
結果INDEXの行指定が「1」になります。
「4」以降「6」以下は同様の考え方で、返る値が「2」なので2行目が指定できます。

と、こんな風に1行目、2行目・・・と読んで1列に返すことができます。

わかりにくいですかね・・・。
私の備忘録なので私が分かれば良い、ということでお願いします。