スポンサーリンク

2行の表を1行にまとめる

エクセル便利技

2行の表を1行にまとめる

タイトルの通り、2行の表を1行にまとめる方法の紹介です。

どういう事かは、下図のとおり。

見た目をよくするために、1つのデータを2行に分割しているような表を、データ作業しやすくするために1行にまとめるという事ですね。

手法は色々ありますが、今回は新しいシートを作って、そこにコピーしていくという方法を紹介します。

なぜこの方法を選んだのかは、後の方に書いておきます。

手順

少し補足をいれつつ、パパっと手順を載せていきます。

欄外に目印を立てる

今回はa,bを入力し、オートフィルで最終行まで反映させましょう。

まずは入力。

 

続いてオートフィルで最終行まで反映。

 

成功すると下図のような状態になります。

1,2はダメと書きましたが、オートフィルを使わないならば1,2でも良いです。(オートフィルではなくコピペで反映させる場合など)

フィルターをかける

フィルターをかけます。

フィルターをかけるだけなのですが、2行目を先頭行と捉えられてしまう場合があります。

そういう時はたいてい、タイトル行に空欄セルがある事が原因なので、なんでもいいのでセルを埋めてからフィルターをかけてみましょう。

新しいシートを用意する

新しいシートを用意します。

真っ白な何もない状態でいいです。

マウス操作もいいですが、Shift+F11でも新しいシートが作れますので、ぜひお試しください。

コピーして貼り付け

あとはフィルター機能を使って、まずは2行になっている表の1行目にあたる部分のみをフィルター機能で表示させてコピーし、用意した新しいシートへ貼り付け。

今回の場合、フィルターでaの行のみを表示させます。

続けて、2行目にあたる部分のみを表示させてコピー、貼り付け。

今度はbの行のみをコピーする感じです。

文章より、下図を見た方がイメージしやすいと思います。

体裁を整えて完成

この手法の場合、列幅などといったレイアウトに関する情報はほぼ移ってきませんので、最後に体裁を整えて完成となります。

なぜ新しいシートにコピーしたの?

冒頭でも少し触れましたが、いくつか手法はあります。

関数を使う場合

コピペでなく、関数を使っても1行にまとめることはできます。

ですが、関数のままにしておくとあとで壊れる可能性もありますし、コピーからの値貼り付けで関数を消すにしても、そこまでするくらいなら、新しいシートに表を作り直した方が手間的にも、考え方的にもシンプルで楽じゃないですか?

と言いつつ、関数による例も後のほうに書いておきました。

既存シートで完結させる場合

この作業、結局のところ2行目にあたる部分を1行目にあたる部分の右側に持ってくればよいだけなので、わざわざ新しいシートに貼り付けていかなくても、元のシート上だけでもなんとかできるものです。

ですがその場合、作業の最後に2行目にあたる部分を行削除するという作業が発生しますよね。

実はこいつが厄介ものなんです。

少量のデータなら気になりませんが、これが1000件を超えるようなデータになってくると、1行空けての行削除って、処理の負荷が大きいんですよね。

いわゆる動きが重いというやつです。

それに比べて、1行空けてのコピーは、そんなに負荷がかかりませんので、今回は新しいシートへコピーするという方法を選びました。

関数でやる場合

コピーではなく、関数を使って2行を1行にする方法もあります。

これは人によって答えが変わってくるところですが、私はINDIRECT関数とROW関数を使って1行目を整備し、あとはコピーまたはオートフィルで最終行まで反映させる方法をとります。

先頭行に数式を準備する

1セルずつ、式を入力していきます。

今回はINDIRECT関数とROW関数を組み合わせて式を作ります。

2行の表を1行にするということで、1行目のセルを参照する場合は、ROW関数の結果に-1をつけます。

1行目のセルを参照の場合:=INDIRECT("" & ROW()*2-1)
2行目のセルを参照の場合:=INDIRECT("" & ROW()*2)

列には、A列ならA、B列ならBというように、アルファベットを入れます。

実際にやってみましょう。

今回実際に使う式は、左から順にこのようになりました。

E1セル =INDIRECT("A" & ROW()*2-1)
F1セル =INDIRECT("C" & ROW()*2-1)
G1セル =INDIRECT("B" & ROW()*2-1)
H1セル =INDIRECT("B" & ROW()*2)
I1セル =INDIRECT("C" & ROW()*2)

たとえばE1セルは、A列の1行目(名前)を表示させる式になりますので、列をAにし、ROW関数の最後に-1をつけています。

そしてH1セルは、B列の2行目(年齢)を表示させる式になりますので、列をBにし、最後に-1をつけないようにしています。

これで前準備は完了です。

コピーで最後まで反映させ、書式設定

先頭行の準備ができたら、あとはコピー(またはオートフィル)で最後まで反映させ、書式を調整するだけです。

コピーの際、何行目まで範囲選択して貼り付ければ良いのか考えるのが面倒だと思うので、とりあえず広めに貼って、あとで不要部分を削除するくらいで良いと思います。

ここでG列の生年月日を見てください。

元々は日付情報なのに、数値になってしまってます。

これは書式設定が日付ではなく、標準になっているためですね。

このように書式設定が必要な項目の列は、事前に、または貼り付け後に書式設定しましょう。

関数を使う場合の弱点

コピーではなく関数を使う場合、いちいちフィルターかけてコピーしてといった作業は無くなります。

反面、以下のようなデメリットもあります。

1.書式を設定しなおす必要があります

基本的には標準書式になります。

そのため、生年月日のような日付書式のセルは数値になってしまうといった問題がでてきます。

日付などのような標準以外の書式を使う列は、あらかじめ、または事後に書式設定する必要があります。

 

2.項目数が多いと非常に面倒くさい

今回の方法では、先頭行を作りこみ、それ以降はオートフィルで反映させるという手法をとっています。

ですが、やってみるとわかるのですが、INDIRECT関数の式を準備するのがちょっと面倒なんですよね。

今回の例題程度の量なら良いのですが、項目数が多い場合、先頭行の数式を準備するのに時間がかかりすぎて、じゃあやっぱりコピーペーストの方法でいいじゃん!となります。

 

コピペと関数、どちらの方が良いとかは無く、デメリットを理解したうえで、その場に適した手法を選べるのが一番ですね。

逆パターンも用意しました

1行にまとめるの逆、1行の表を2行に分ける方法もまとめました。

コメント

タイトルとURLをコピーしました