いまさら聞けないExcelの使い方講座

【Excel】VBAは不要! 一瞬で複数のシート上ある表を1つに結合する簡単な方法

複数の表を一瞬で結合できます

複数の表を一瞬で結合! 別シートにある表もOK

 複数の表を結合したいことがありませんか? 例えば、集計作業のために複数シートにある表をまとめるといった作業です。コピー&ペーストをくり返すのは面倒ですよね。シートによって行数が異なると、さらに手間がかかります。

複数のシートにあるデータを1つの表にまとめる場合にどうしますか?

 複数シートにある数値を一気に合計する場合は、「3D集計」や「串刺し集計」と呼ばれるSUM関数を使ったテクニックもありますが、並べ替えや小計行などの追加を想定していると使えません。

 今回紹介する「VSTACK関数」を利用すれば一瞬です。同一シートにある表を結合するだけでなく、複数シートにある表も結合可能です。本稿執筆時点で、Microsoft 365のExcelのみに限定されますが、結合したい表(セル範囲)を「,」で区切って指定するだけの手軽さです。さっそく使ってみましょう。

VSTACK関数の構文。引数[配列]に指定したセル範囲を縦方向に重ねて表示します

同一シートにある表を結合する

 同じワークシートにある表を結合して、VSTACK関数の動作を確認してみましょう。見出し行はあらかじめ用意しておきます。結果はスピルで表示されるので、入力する数式は1つのみです。

結果を表示するセルの先頭(ここではセルA11)に「=VSTACK(A3:E7,G3:K6)」と入力します(①)
2つの表が結合された結果がスピルで表示されます

複数シートにある表を結合する

 ここから本題です。VSTACK関数を使って複数シートにある表を1つにまとめてみます。ここでは[秋葉原店][新宿店][中野店][EC]という4つのシートがあり、結合した表を[全店舗集計]シートに表示します。VSTACK関数の数式を入力している途中で、シートを操作するので混乱しないように注意しましょう。

 3D集計の結果の数式を見てみましょう。「:」の左右が3D集計の対象となるワークシートの名前です。「:」は「から」を意味します。「!B3」は、そのセルB3を表すので、この例では「[秋葉原店]シートから[EC店]シートのセルB3」という意味です。SUM関数で合計しています。

セルA3に「=VSTACK(」まで入力します(②)
左端の[秋葉原店]のシート見出しをクリックし(③)、[Shift]キーを押しながら右端の[EC]のシート見出し(④)をクリックします
[秋葉原店]~[EC]シートが選択され(⑤)、数式は「=VSTACK(秋葉原店:EC!」のように変化します(⑥)
そのまま、セルA3~E7をドラッグします(⑦)。「=VSTACK(秋葉原店:EC!A3:E7」と表示されていることを確認して、[Enter]キーを押します(⑧)
[全店舗集計]シートに切り替わって、結合された表が表示されました

余計な「0」を処理する

 上記の手順で表を結合した結果、余計な「0」が含まれていますね。これは[新宿店][中野店][EC]のシートのセルA3~E7のうち、データのないセルが「0」に変換された結果です。

 スピルの結果を“値”としてコピペしてから絞り込んでも構いませんが、FILTER関数を組み合わせて非表示にするテクニックも紹介します。入力する数式は以下の通りです。

=FILTER(VSTACK(秋葉原店:EC!A3:E7),CHOOSECOLS(VSTACK(秋葉原店:EC!A3:E7),1)<>0)

 数式中のCHOOSECOLS関数は、指定したセル範囲から特定の列を取り出す関数です。「CHOOSECOLS(VSTACK(秋葉原店:EC!A3:E7),1)」は、VSTACK関数で結合した表の1列目を示します。

 この数式をFILTER関数の条件(引数[含む])に利用して「0でない」ことを判定します。FILTER関数の構文は以下の通り。詳しくはこちらの記事も参考にしてください。

FILTER関数の構文。引数[配列]には対象のセル範囲を指定します。[含む]には[配列]から抽出する条件を指定します。[空の場合]は一致するデータがない場合に表示する値を指定します(省略可能)
セルA3の数式を「=FILTER(VSTACK(秋葉原店:EC!A3:E7),CHOOSECOLS(VSTACK(秋葉原店:EC!A3:E7),1)<>0)」と書き換えます(⑨)
1列目(製品名)の列が「0」でない行のみが取り出されました

 なお、VSTACK関数の数式をほかのセル(以下の場合はセルG3)に入力しておき、スピルの結果を参照すると、さらにスマートに記述することもできます。

=FILTER(G3#,CHOOSECOLS(G3#,1)<>0)
VSTACK関数の数式をセルG3に入力してあるので、スピルの結果は「G3#」と表現できます。セルA3の数式は「=FILTER(G3#,CHOOSECOLS(G3#,1)<>0)」と簡略化できます(⑪)