【Excel】VSTACK関数で複数シートのデータを結合する方法

この記事は約5分で読めます。

今回は、Excelで複数シートのデータを縦方向に結合する際に役立つ「VSTACK関数」の使い方について紹介します。
毎月の売上データや、各担当者から集まったリストなど、複数の表を一つにまとめる作業に時間をかけている方もいらっしゃるかもしれません。
VSTACK関数を利用することで、コピーや貼り付けの手間を減らし、関数一つで自動的にデータを結合することが可能になります。

VSTACK関数とは

VSTACK(ブイスタック)関数は、配列や範囲を縦(Vertical)に積み重ねて(Stack)表示する新しい関数です。
Excel 2021以降やMicrosoft 365のバージョンで利用できる機能となっています。
これまで複数の表を一つにまとめるには、マクロ(VBA)を組んだり、Power
Queryなどの機能を使ったりする必要がありましたが、VSTACK関数の登場により、数式だけでシンプルに実現できるようになりました。

VSTACK関数の基本的な構文

関数の構文は非常にシンプルで、括弧の中に結合したい範囲をカンマ区切りで指定するだけです。
=VSTACK(配列1, [配列2], …)
配列1の上に配列2が重なるのではなく、指定した順番通りに上から下へとデータが積み重なっていく仕組みです。

複数シートのデータを結合する基本的な手順

別々のシートに分かれている売上表などを、1つのシートに集約する手順を見ていきましょう。
「4月売上」「5月売上」「6月売上」という3つのシートのデータを、「まとめ」シートに結合するという想定で進めます。

関数を入力する

  • データをまとめるための新しいシート(まとめシート)を用意します
  • 結合したデータを表示させたい一番左上のセルを選択します
  • セルに「=VSTACK(」と入力します

結合したい範囲を指定する

  • 「=VSTACK(」と入力した状態のまま、「4月売上」シートの見出しをクリックします
  • 結合したいデータの範囲をドラッグして選択します
  • 数式バーに範囲が表示されたことを確認し、カンマ「,」を入力します
  • 続けて「5月売上」シートを開き、同様にデータ範囲を選択してカンマを入力します
  • 最後の「6月売上」シートの範囲も選択し、最後に括弧を閉じる「)」を入力してEnterキーを押します

スピル機能による結果の表示

Enterキーを押すと、VSTACK関数が入力されたセルを起点として、下および右方向に向かってデータが一気に展開されます。
これを「スピル」と呼びます。
数式を入力するのは一番上のセルだけで済み、オートフィルで数式をコピーする必要がないのが特徴です。

3D参照を使ってシート指定を簡略化するテクニック

結合するシートが3つ程度ならカンマで区切って指定できますが、12ヶ月分などシート数が多い場合は指定する作業が煩雑になります。
そのような場合は、「3D参照」というテクニックを使うと数式をすっきりさせることが可能です。

3D参照とは

3D参照は、連続して並んでいる複数のシートを、串刺しにするようにまとめて指定する方法です。
例えば、「4月」シートから「3月」シートまでの同じセル範囲を一度に指定できるようになります。

VSTACK関数と3D参照を組み合わせる手順

  • まとめシートのセルに「=VSTACK(」と入力します
  • 最初のシートの見出しをクリックします
  • Shiftキーを押しながら、最後のシートの見出しをクリックします
  • 対象となるデータ範囲を選択します
  • Enterキーを押して数式を確定します

この操作により、数式にコロン(:)が含まれる形になり、間に挟まれたすべてのシートの同じ範囲が縦に結合されます。

見出し行を一度だけ表示させる工夫

各シートに「日付」「商品名」「金額」などの見出し行が含まれている場合、そのまま結合すると途中に何度も見出し行が登場してしまいます。
見出しを一番上だけに表示させるには、少しの工夫が必要です。

見出しとデータを分けて結合する

  • 1つ目の引数として、最初のシートの見出し行のセル範囲を指定します
  • 2つ目以降の引数では、各シートの見出しを除いたデータの範囲を指定していきます

このようにすることで、一番上に1回だけ見出しが表示され、その下に各シートのデータが連続して並ぶようになります。

空白行やエラーを非表示にするアプローチ

結合するシートごとにデータ数が異なる場合、あらかじめ大きめの範囲を指定しておくことがあります。
しかし、そのままVSTACK関数を使うと、データが入っていない空白のセルが「0」として表示されてしまうことがあります。

FILTER関数と組み合わせて空白を除外する

このような空白行を除外するには、FILTER関数と組み合わせるアプローチが有効です。

  • =FILTER(VSTACK(配列), VSTACK(条件範囲)””) というように数式を組み立てます
  • データの核となる列が空白でない行だけを抽出するよう条件を指定します

この組み合わせにより、「0」が並ぶ不要な行を省き、入力されているデータだけがきれいに結合された表を作成することが可能になります。

VSTACK関数を使用する際の注意点

VSTACK関数は非常に便利ですが、いくつか気をつけたいポイントがあります。

Excelのバージョン制限

VSTACK関数は比較的新しい関数であるため、古いバージョンのExcelでは使用することができません。
社内外でファイルを共有する場合、相手のExcelのバージョンによっては数式がエラーになってしまう可能性があるため、環境の確認が推奨されます。

スピルエラーの回避

VSTACK関数でデータが展開される予定の範囲に、何か別のデータや文字が入力されていると、「#SPILL!」というエラーが表示されて結合結果が表示されません。
展開先となるセル範囲は、常に空白にしておく必要があります。
エラーが出た場合は、邪魔になっているデータを削除するか別の場所に移動させることで解消されると思われます。

まとめ

VSTACK関数を活用することで、複数のシートに分散したデータを縦に結合する作業が手軽に行えるようになることがお分かりいただけたかと思います。
3D参照やFILTER関数など、他の機能と組み合わせることで、さらに柔軟で実用的なデータ集約が可能になります。
これまで手作業で表をまとめていた方は、この関数の導入を検討してみるのも良い選択肢となるかもしれません。
集計作業の効率化に向けた一つのアプローチとして、VSTACK関数を試してみるのも面白いアプローチと言えそうです。