Microsoft365のExcelには、複数シートの表を一つのシートに結合する際に便利なVSTACK関数があります。
リスト形式のデータ(列ごとに同じ種類のデータが入力された表)を一つの表につなげるような関数です。もちろん、複数の表が一つのシートにある場合の結合でも活用できます。
なお、VSTACK関数はリスト形式の表を縦方向に結合に適しており、単票形式の表を一覧にしたい場合は、【Excel】複数シートのデータを抽出して一つのシートにまとめる方法(INDIRECT関数の活用) をご覧ください。
内容:
基本
VSTACK関数は、次の構文となる。
=VSTACK(array1,[array2],...)
array1に一つ目の表範囲、array2に2つ目の表範囲といった要領で、結合したい範囲をカンマ区切りで追加していく。
具体的な事例
次のように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関数の活用が適した場面
複数シートの表を一つのシートに結合する際に便利なVSTACK関数ですが、次のような場面での利用が良さそう。
- 繰り返し頻度が少ない
- 数式だけで目的を完結したい
- 複数の表を一つにしてVLOOKUP関数やXLOOKUP関数などの範囲に利用
例えば、 「=VLOOKUP(検索値,範囲,列番号,[検索方法])」で、
範囲部分をVSTACK関数で範囲指定など。
他の方法について
他のブックにあるシートを統合したい場面や、シートの数が多い場面ではPowerQueryやVBAなどの方が効率的と思われる。
その他、データの加工・抽出、管理の操作事例を以下にまとめています。
以上、Microsoft365のExcelで、複数シートの表を一つのシートに結合する際に便利なVSTACK関数の活用事例でした。