はじめに
月別に分かれた売上などのデータを、通期でSUMIFS関数やピボットテーブルで集計したいのに「シート結合が面倒」…という方向けに、VSTACK関数で複数シートの表を1つにまとめる方法を解説します。3D参照で12か月分も一括化でき、さらに空白行やヘッダーを処理する方法もご紹介しています。
※VSTACK関数は主に「Excel for Microsoft 365(Web版含む)」で利用できる動的配列関数です。Excelのバージョンによっては使えない場合があります。
この記事の要点
- VSTACK関数は縦方向に範囲(配列)を結合できる関数
- VSTACK(範囲1,範囲2,....)のように記述
- 下方向への範囲はとりあえず広めにとってOKだが、その後で不要セルの処理が必要になる
- FILTER関数も組み合わせれば、不要な行は表示せず結合可能だが、式が若干煩雑になる
- 手軽な方法は①VSTACK関数により表を結合、②値貼り付け、③オートフィルターにより不要な行のみ表示、➃行ごと削除
必要なデータが複数シートに分割されている
例えば左側のように、1月1シートとして作成されているデータがあるとします。これを通期分として12か月まとめたデータに結合したい場合に活躍します。右側の画像は間のデータをグループ化していますが、12か月分すべて含まれています。
(なお、複数の表の見出しの列がそろっていることが前提になります。そうでない場合はパワークエリ等別の手段が有効です。)

VSTACK関数の使い方
VSTACK関数は、複数の指定した範囲について垂直(縦方向)にデータを結合する関数です。
関数は以下のように記述します。範囲2~以降は省略可能です。
=VSTACK(範囲1,範囲2...)
例えば以下の画像のように、B~I列にある2つの表を結合するシンプルな場合では、以下のように2つの範囲を続けて指定するだけです。

シート数が多い場合は串刺し集計を使う
シート数が多い場合、すべての範囲を個別に指定するのが大変なため、串刺し集計(3D参照)を使用するのが便利です。
串刺し集計は、関数を入力した最初のシートをクリックし、その後でShiftキーを押しながら最後のシートをクリックします。そのあとでセル範囲を選択します。
表記としては以下のようになります。
=関数(最初のシート名:最後のシート名!セル番地)
冒頭の12か月分のシートを結合する場合はこのようになります。

セル範囲については上記画像のように、各シートのデータ数を上回る数を指定しておけば漏れずに結合されます。
ただし、各シートにて行数を多めに取ると、空白行が混ざって0が表示される行が並びます。以下はVSTACK関数で空白行まで取り込んだ結果です。

FILTER関数を使用して、A列が0以外が表示されるように書けば以下のように0は表示せずに済みます。
ただ、FILTER関数で書こうとすると数式が長くなることや、各シートにある見出し(Code、日付、商品名等)は表の中に繰り返し出てきてしまいます(一応これも範囲指定などで対処は可能です)。

幸いオートフィルターをかければ規則性をもって表示されますので、見出しと0のみ表示して、それを行ごと削除するのが手軽な対処法です。VSTACK関数のままだとオートフィルターをかけてから行を削除できないため、事前に値貼り付けしておく必要があります。

一連の手順
一連の手順と、それを動画にしたものが以下になります。
- VSTACK関数によりすべてのシートを結合
- 値貼り付け
- オートフィルターで見出しと0のみ表示
- 不要な行を削除
上記の操作例では12シート分結合するのに1分かからず、すべてのデータをコピーペーストするよりは遥かに効率的です。必要なケースではぜひお試しください。

