shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel】複数シートの表を一つのシートに結合する方法(VSTACK関数の活用)

Microsoft365のExcelには、複数シートの表を一つのシートに結合する際に便利なVSTACK関数があります。

リスト形式のデータ(列ごとに同じ種類のデータが入力された表)を一つの表にまとめるような関数です。もちろん、複数の表が一つのシートにある場合の結合でも活用できます。

なお、VSTACK関数はリスト形式の表を縦方向に結合に適しており、単票形式の表を一覧にしたい場合は、【Excel】複数シートのデータを抽出して一つのシートにまとめる方法(INDIRECT関数の活用) をご覧ください。

内容:

基本

VSTACK関数は、次の構文となる。

=VSTACK(array1,[array2],...)

array1に一つ目の表範囲、array2に2つ目の表範囲といった要領で、結合したい範囲をカンマ区切りで追加していく。

VSTACK 関数 - Microsoft サポート

 

具体的な事例

次のようにExcelファイル内の複数シートに、同じフォーマットの表があり、一つの表に結合する。

複数のシートに同様のリスト形式の表がある

複数シートの表を一つのシートに結合のアウトプットイメージ

この事例で、シート「統合」のA1に入力している数式は、次のとおり。

=VSTACK('2023年2月'!A1:C4,'2023年3月'!A1:C4,'2023年4月'!A1:C4,'2023年5月'!A1:C4)

VSTACK関数は、スピルといわれる隣接する他のセルにも値を返す関数で、シート「統合」のA1以外のセルに数式は入っていない

補足説明

数式で指定する表範囲について

複数のシート上の同じセルまたは範囲参照(いわゆる、3-D参照)であれば、次のようにすることも可。

=VSTACK('2023年2月:2023年5月'!A1:C4)

ただし、表範囲が固定となるため、可変範囲とするため「テーブル」や「名前の定義」を設定し、数式に含めてもよい。

=VSTACK(T202302[#すべて],T202303,表202304,表202305)

この数式は、前述の事例を次のように設定しており、「テーブル」や「名前の定義」の混在も問題なかった。

”T”で始まる部分はテーブルで設定(「'2023年2月'!A1:C4」をT202302のテーブル名)

”表”で始まる部分は名前の定義で設定、「'2023年4月'!A1:C4」を表202304の名前)

 

他の方法について

複数シートの表を一つのシートに結合する際に便利なVSTACK関数ですが、次のような場面での利用が良さそう。

・繰り返し頻度が少ない

・数式だけで目的を完結したい

・複数の表を一つにしてVLOOKUP関数やXLOOKUP関数などの範囲に利用
 例えば、 「=VLOOKUP(検索地,範囲,列番号,[検索方法])」で、
 範囲部分をVSTACK関数で範囲指定など。

 

なお、他のブックにあるシートを統合したい場面や、シートの数が多い場面ではPowerQueryやVBAなどの方が効率的と思われる。

shikumika.org

その他、データの加工・抽出、管理の操作事例を以下にまとめています。

shikumika.org

以上、Microsoft365のExcelで、複数シートの表を一つのシートに結合する際に便利なVSTACK関数の活用事例でした。