見出し画像

【Excel】2段ずつの表を一瞬で1行1件にリスト化★

こんにちは、HARUです!

ビジネスの現場では、1件の情報が2段ずつや3段ずつに積みあがった表に出くわすことがあります。

Excel上は入力するだけで加工や集計が行われず、印刷したりPDFに変換したりPowerPointなどに貼り付けたりしたときの見やすさを優先するならこれでも良いですが、いざこの表のデータをまとめて整形したいとなったときは、やはり1行1件のデータベース形式になっていることが理想です。

とはいえこれを1つずつ加工していくのは相当面倒ですよね。

そこでこの記事では、複数段の表を一瞬でデータベース構造に変換するテクニックをご紹介します。

必要な作業は驚くほどにシンプルなので、ぜひ最後までご一読ください!



なお、今回使ういくつかの関数はすべて、本記事執筆時点でMicrosoft365にのみ仮実装されている関数です。

以前の記事で取り上げた「スピル」動作に触れておくことでより理解が深まりますので、まずそちらをご覧いただくことをおススメします!
↓スピルの挙動と活用術はこちら↓


基本動作


今回のテーマでおさえておきたい関数は4つあります。

TOROW:配列内のデータを1行に並べる
TOCOL:配列内のデータを1列に並べる
WRAPROWS:1列(行)に並んだデータを指定の列数で改行する
WRAPCOLS:1列(行)に並んだデータを指定の行数で改列する

4つのグループで構成される営業課の人員表をサンプルに、早速基本動作を見ていきましょう。

TOROW関数

TOROW関数を挿入し、第1引数「array(配列)」に対象のデータ範囲を参照します。

残りの引数は省略可能です。
結果を見てみると、元々4行4列だったデータが1行に並びます。

ただし、元の表で空白セルとなっている部分は「0」が返されます。
そこでTOROW関数の第2引数「ignore(無視)」で、"1"(空白を無視する)を選択します。

これにより、空白セルを無視してデータを並べられます。

さて、今回は「赤井」→「森下」→「佐々木」のように、元データを横方向に見て並べています。

対して「赤井」→「鹿島」→「五十嵐」のように、縦方向に見て並べたいときは、第3引数「scan_by_column(スキャン)」を"TRUE"(列でスキャンする)に設定します。

これにより、元データを縦方向にみた「赤井」→「鹿島」→「五十嵐」の純に並びます。


TOCOL関数

TOCOL関数の基本構成はTOROW関数と同じです。

①TOCOL関数を挿入し、第1引数「array(配列)」に対象のデータ範囲を参照する。
②第2引数「ignore(無視)」で"1"(空白を無視する)を選択する。
③第3引数「scan_by_column」で"TRUE"(列でスキャンする)を選択する。

これにより、前述のTOCOL関数で指示したのと同じ要件でデータが1列に並びます。


重複の削除

もし2つのグループを兼務しているなどで同じ名前が2回登場し、この重複を解消した状態で並べたいときは、TOCOL関数(TOROW関数)をUNIQUE関数でネストしましょう。



WRAPROWS関数

1列(行)に並んだデータを指定の列数で改行します。

①WRAPROWS関数を挿入し、第1引数「vector(1列(行))」に対象のデータ範囲を参照する。

②第2引数「wrap_count(列数)」に、横に何件並べたら次の行へ移動するか、その列数を指示する。
今回は横に4件並べてから改行したいので、"4"列とする。

第3引数は省略可能です。
結果、1列だったデータが横方向に並べられ、指定した"4"列目で次の行に移るように表示されます。

なお、たとえば第2引数「wrap_count(列数)」を"5"にすると、スピル範囲のセル数が15個となり、全12件の対象データに対し過剰な3つはエラーが返ります。

ここで、第3引数「pad_with(埋める)」の出番です。
対象のデータ以上にスピル範囲のセル数が多い場合にどの文字で埋めるかという指示を出すことができます。

今回は””と入力し、何も表示しないように設定します。

これにより、エラー表示が解消されます。

このようにマトリクス構造で取得するスピル範囲には往々にして余分なセルが発生しますので、省略可能でも第3引数はあらかじめ設定しておくことをおすすめします。


WRAPCOLS関数

1列(行)に並んだデータを指定の行数で改列します。
WRAPCOLS関数の基本構成はWRAPROWS関数と同じです。

①WRAPROWS関数を挿入し、第1引数「vector(1列(行))」に対象のデータ範囲を参照する。
②第2引数「wrap_count(行数)」に、縦に何件並べたら次の列へ移動するか、その行数を指示する。
今回は縦に5件並べてから改列したいので、"5"行とする。
③第3引数「pad_with(埋める)」に""を入力する。

結果、1列だったデータが縦方向に並べられ、指定した"5"行目で次の列に移るように表示されます。



2段構造の表を1行1件に


それではこれらの関数を使って、2段ずつに蓄積された名簿を1行1件のデータベース形式にしていきます。
(更新後の表は別のシートに生成したいので、関数は別のシートに記述します)

①TOROW関数を挿入する。

②元データを見出しも含めてすべて参照する。

これにより、まずはすべてのデータが1行に並ぶ。

③TOROW関数をWRAPROWS関数の第1引数「vector」としてネストし、第2引数「wrap_count」は見出し項目数である"6"を入力する。
※今回は第3引数「pad_with」の設定は不要。

すべてが1行に収まっていたデータが、横に6件並べた段階で改行されるように表示され、結果的に1行1件のデータベース形式で名簿が生成できました!

あとは列幅を調整し、スピル範囲を値貼り付けし、テーブルを設定すれば完成です。



いかがでしたか?

これまで膨大な時間がかかっていた表の構造改革が、異様なまでに一瞬で終わってしまうのです。

まだまだ使えるバージョンは限られますが、機会があればぜひ使ってみてくださいね!



↓↓Excel操作をとにかく高速化したい方へ↓↓


この記事が気に入ったらサポートをしてみませんか?