- 公開日:
エクセルで表形式のデータを縦一列に並べる方法
この記事では、エクセルで表形式のデータを縦一列に並べる方法をご紹介します。
表からデータを取り出す際、コピー&ペーストする方法がありますが、データ数が多いほど効率が悪くなってしまいます。
以下では、関数を組み合わせて表形式のデータから縦に並び変える方法をご紹介します。
エクセルで表形式のデータを縦一列に並べる方法
表からデータを取り出して縦一列に並べる方法について、列ごとに並べる方法と行ごとに並べる方法に分けてご紹介します。
表形式のデータを列ごとに縦一列に並べる方法
表のデータを縦に並べる際、コピーして貼り付けたり切り取ったりするのは手間がかかります。以下では、関数を使って表のデータを縦一列に並べる方法をご紹介します。
今回は、表形式のデータを列ごとに縦一列に並べていきます。例では、5行データを並べたら次の列のデータを縦一列に並べていきます。
任意のセル(例:E1セル)に「=INDEX($A$1:$C$5,MOD(ROW()-1,5)+1,INT((ROW()-1)/5)+1)」を入力し、Enterを押します。数式の詳しい説明については下記「列ごとに縦一列に並べる数式について」セクションでご紹介しています。
結果が表示されました。オートフィルして数式をコピーします。E1セルのフィルハンドルをドラッグします。
表形式のデータを縦一列に並べることができました。
表形式のデータを行ごとに縦一列に並べる方法
今回は、表形式のデータを行ごとに縦一列に並べていきます。例では、3列データを並べたら次の行のデータを縦一列に並べていきます。
任意のセル(例:E1セル)に「=INDEX($A$1:$C$5, INT((ROW()-1)/COLUMNS($A$1:$C$5))+1, MOD(ROW()-1, COLUMNS($A$1:$C$5))+1)」を入力し、Enterを押します。
数式の詳しい説明については下記「行ごとに縦一列に並べる数式について」セクションでご紹介しています。
結果が表示されました。オートフィルして数式をコピーします。
E1セルのフィルハンドルをドラッグします。
表形式のデータを縦一列に並べることができました。
列ごとに縦一列に並べる数式について
INDEX関数は指定した範囲内のデータを取得します。使用する参照形式の書式は「=INDEX(配列,行番号,[列番号])」です。
今回は、A1セルからC5セルの範囲を取得します。
MOD関数は商(割り算)の余りの数を求めます。書式は「=MOD(数値,除数)」です。今回は、指定したセルの行番号を返すROW関数と組み合わせます。ROW関数の書式は「=ROW([参照])です。
ROW関数で数式を入力したセルの行番号を取得し「-1」することで0から連番を取得できます。割り算の余りを求めるMOD関数を使って1から5までの行番号のパターンを作ります。
INT関数は小数部分を切り捨てて整数を返します。書式は「=INT(数値)」です。今回は、ROW関数と組み合わせて1から5までの列番号のパターンを作ります。
つまり、5行数えたら次の列に移動するという意味です。
以上の説明により、A1セルからC5セルにある表形式のデータを列ごとに縦一列に並べることができます。
データの範囲を変更する場合は、INDEX関数の引数とMOD関数の引数を変更します。
例えば表の範囲がA1セルからD8セルの場合、「=INDEX($A$1:$D$8, MOD(ROW()-1, )8+1, INT((ROW()-1)/8)+1)」となります。
行ごとに縦一列に並べる数式について
COLUMNS関数は指定したセル参照の列数を求めます。COLUMNS関数の書式は「=COLUMNS(配列)」です。
ほかの数式の説明や書式については上記「列ごとに縦一列に並べる数式について」を参考にしてください。
「INT((ROW()-1)/COLUMNS($A$1:$C$5))+1」のINT関数はROW関数を使って数式を入力したセルの列番号と0からの連番を取得します。COLUMNS関数は引数の範囲の列数を取得します。これにより行番号を列数で割った商を求めます。
($A$1:$C$5)の行番号として使用されます。
「MOD(ROW()-1, COLUMNS($A$1:$C$5))+1)」のMOD関数はROW関数を使って数式を入力したセルの列番号と0からの連番を取得し、COLUMNS関数は引数の範囲の列数を取得します。これにより行番号を列数で割った余りを求めます。
($A$1:$C$5)の列番号として使用されます。
以上の説明により、A1セルからC5セルにある表形式のデータを行ごとに縦一列に並べることができます。
データの範囲を変更する場合は、INDEX関数の引数とCOLUMNS関数の引数を変更します。
例えば表の範囲がA1セルからD8セルの場合、「=INDEX($A$1:$D$8, INT((ROW()-1)/COLUMNS($A$1:$D$8))+1, MOD(ROW()-1, COLUMNS($A$1:$D$8))+1)」となります。