この記事ではエクセルにて2列のデータを1列にまとめる方法について説明します。
この処理には
・OFFSET関数
・INT関数
・MOD関数
・ROW関数
を組み合わせて使うといいです。
並べ替えをするのはOFFSET関数で、INT関数、MOD関数、ROW関数は引用するセルを設定するために使います。
では実際にサンプルを用いてみていきましょう。
エクセルにて2列のデータを1列にまとめる方法(交互)
エクセルにて2列のデータを1列にまとめる(交互に:以下画像)作業には、まずはOFFSET関数を使うのがいいです。
今回のゴールは以下のようなデータです(図のように「列1」と「列2」のデータを交互にまとめ列に並べ直しをします。)
上述のよう2列を1列に交互にまとめるにはOFFSET関数を使用しましょう。
OFFSET関数は、指定したセル(や範囲)から指定した行と列の分シフトした位置にあるセルの内容を引用する関数です。
なお、OFFSET関数を使う前に、シフトする行数と列数をはっきりするための、前処理用の表を設けましょう。
「行数」と「列数」は基準からの移動量、移動した先のセルの内容を「まとめ列」に表示しています。
基準から0行0列移動した結果が「x1」、0行1列移動した結果が「y1」、1行1列移動した結果が「x2」という具合です。
この行数、列数をいちいち表に入力するのは手間がかかるので、代わりにINT関数、MOD関数、ROW関数を使うといいです。
OFFSET関数の引数用の、行数の計算式はINT((ROW(B3)-3)/2)と入力しましょう。
INT関数は指定された数値の小数点以下を切り捨てる関数で
=INT(数値)
と入力します。
ROW関数は指定したセルの行の数値を取り出す関数で
=ROW(セル)
と入力します。
計算の内容は
・ROW(B3)でB3セルの行数を取り出す
・B3セルをOFFSET関数の基準にするために、B3の行数である3を引く
・その結果を「列数」の2で割る
・INT関数で整数部を取り出す。
ということです。
これらをまとめると、行数の計算式はINT((ROW(B3)-3)/2)となるわけです。
OFFSET関数内の引数用の、列数はMOD(ROW(B3)-3,2)と入力します。
この式の意味は以下の通り。
MOD関数は数値を除数で割った時の余りを算出する関数で
=MOD(数値,除数)
と入力します。
この計算の内容は、
・B3セルの行数を取り出す
・B3セルが基準なので3行を引く
ここまでは行と同じです。
つまり、列数の数値としては、「MOD関数で、数値を列数で割った余りを取り出す」処理を行っているわけですね。
これでH3セルに表示させたい「行数」と「列数」は「0,0」となります。
E3セルとF3セルの式を下方にコピーするとこのようになります。
この表は、上の説明で手入力した表と内容が同じということがわかります。
このできた表を用いてOFFSET関数で並べ替えを行います。
OFFSET関数は、上でも軽く触れましたが、指定したセル(範囲)から指定した行と列の分シフト(移動)した位置にあるセルの内容を引用します。
=OFFSET(基準(セルまたは範囲),行数,列数)
と入力します。
この例では基準はB3セルとして、シフトさせるための行数と列数はそれぞれ表から引用します。
ENTERにて処理を確定させると以下の通りとなります。
式を下方までコピーするとこのように「列1」と「列2」のという2列が1列に(交互に)繰り返されました。
<div class=”concept-box5″><p>
なお、行数や列数などのセルを設けなくとも、直接計算式を1セルに入力していってもOKです。
まとめた場合は、=OFFSET($B$3,INT((ROW(B3)-3)/2),MOD(ROW(B3)-3,2))と処理すればOKですね。
</p></div>
エクセルにて2列のデータを1列にまとめる方法【複数列を1列に並べる】
上では「列1」と「列2」のデータを交互に並べる方法について説明しました。
今度は「列1」を並べた後に続けて「列2」のデータを並べる方法について説明します。
今回のゴールは以下の通りです。
ここでも使う関数はOFFSET関数です。
OFFSET関数は上で説明したように、基準から指定した行と列の分を移動したセルの内容を引用します。
関数の説明は上でしていますので、ここでは「行数」と「列数」の指定と、「まとめ列」の結果の関係を見てみます。
このように列数を固定で行数を順に指定すると「列1」に続いて「列2」が表示されます(連続して2列を1列にまとめられる)。
これをまたINT関数、MOD関数、ROW関数を用いて「行数」「列数」の表を使わないで表示する方法を説明していきます。
交互に表示させるときは、行の指定にINT関数、列の指定にMOD関数を使いましたが、続けて表示させるときは、行数の指定にMOD関数、列数の指定にINT関数を使います。
行数の指定にはMOD(ROW(B3)-3,10)と入力しましょう。
列数の指定にはINT((ROW(B3)-3)/10)と入力します。
後にOFFSET関数を適用させた「まとめ列」H3セルに表示させたい「行数」と「列数」は「0,0」となります。
それぞれの式を「まとめ列」で表示させたい行数の20行分、下方にコピーをするとこうなります。
行数が0~9までを2回繰り返し、列数は上10個が0で下10個が1になり、OFFSET関数を説明した表と同じになりました。
さらに、2列を1列にしたいセル(ここではH3セル)に=OFFSET($B$3,E3,F3)と入力します。
B3セルは「基準」なので「$B$3」とするのを忘れないようにしましょう。
ENTERにて処理を確定、数式をコピーさせると以下の通りとなります。
これで、縦に続けて2列を1列にまとめる処理が完了です。
<div class=”concept-box5″><p>
なお、途中のOFFSET関数の引数用の列は作成せずとも、以下のよういきなり数式をOFFSET関数内に入れてもOKです。
具体的には、「まとめ列」のE3セルにOFFSET($B$3,MOD(ROW(B3)-3,10),INT((ROW(B3)-3)/10))を直接入力します。
このように表が無くても「基準」の「x1」がE3セルに表示されました。
基準の内容が確認できたので、E3の式を下方に20行分、E22までコピーします。
このように「行数」「列数」の表が無くてもx1~x10、y1~y10が並んで表示されました。
</p></div>
まとめ エクセルにて2列のデータを1列にする方法(交互など:複数列を1列に)
この記事では、エクセルで2列のデータを1列にする方法について説明しました。
並べ替えは、別に表を作ればOFFSET関数だけで処理できますが、INT関数、MOD関数、ROW関数を組み合わせることで、表に頼らず計算式だけで並び替えができます。
一見難しいですが「何を求めるのか」がわかれば応用もできると思いますので頑張ってみてください。
エクセルでのさまざまな処理を理解し、業務に役立てていきましょう。