公開日 2025/06/16
更新日 2025/06/16

2 つ以上の表のデータを 1 つの表にまとめる (VSTACK 関数) 

目次

下図の [商品リスト1] テーブル (オレンジ) と [商品リスト2] テーブル (緑) のデータを 1 つの表にまとめます。 もちろん商品リストは 3 つでもよいですがここでは 2 つでやります。

XLOOKUP や VLOOKUP 関数で参照したい表が 2 つに分かれてしまっている、単純に 2 つに分かれている表を 1 つにして表示したいなど、くっつけてその後どうしたいのかは様々だと思います。
1 回こっきりでその後データも増えない、というのならコピーでもよいと思うけれど、テーブルのデータが増えたり減ったりした場合に、コピーしなおさないといけません。それが嫌なのでここでは VSTACK 関数で対応してみます。

VSTACK 関数 

VSTACK 関数は、ヘルプによると「配列を垂直方向に順番に追加して、より大きな配列を返します。」とのこと。 縦方向に並んでいる範囲が 2 つあるとき、1 つ目の範囲の下に 2 つ目以降の範囲をくっつけて縦長にした結果を返してくれる、ということですね。

VSTACK 関数の構文はこちら。

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

 array1   : 1 つ目の配列 (範囲)
[array2] : 2 つ目の配列 (範囲)

3 つ目の範囲があるのなら「=VSTACK( array1 , array2 , array3)」のように指定する、ということ。 結果はスピルされて表示されます。

引数に指定する配列について念のため書いておくと、

  • ここでは 2 つのテーブル (商品リスト1、商品リスト2) を使うけれど、テーブルではないセル範囲を指定することもできます。
  • ここでは 2 つのテーブルと結果を表示するセルが同じワークシートに配置されていますが、ブック内の異なるワークシートに配置されていてもよいです。
  • 複数列があるとき、一番多い列数分結果が返ります。2 つの配列の列数は異なっていてもよいけれど、列が存在しない場合は #N/A エラーが返ります。

結果を表示したいセルに数式を入力して確定します。ここではテーブル名で指定しているので数式は下記です。 ドラッグで範囲を選択するのなら、見出し部分は含めずにドラッグすればテーブル名だけ (すなわちデータ部分だけ) が指定されます。

=VSTACK(商品リスト1 , 商品リスト2)

配列をテーブル名で指定できるということは、テーブルに行が追加されて範囲が拡張されても対応できる、ということです。 もとのテーブルのデータが増減することが想定されるのならセル範囲 (A4:B9 など) で配列を指定するのではなく、テーブルに変換してテーブルの構造で指定したほうがよいでしょう。

たとえば下図の [商品リスト1] に 1 行増やしてみると、VSTACK の結果も 1 行増えます。

おまけ

テーブルの結合なら Power Query でもよいのでは?と。それはそうです。 手順は省くけれど、下図では [商品リスト1] と [商品リスト 2] を [接続の作成のみ] で作成して、クエリの追加で 1 つにまとめて [商品リスト] クエリを作り、ワークシートに読み込もうとしています。
 読み込み先のセルを指定したいので [閉じて次に読み込む] を実行しています。

この場合はもとのテーブルにデータが増えるなどの変更が加わっても即座には結合したテーブルには反映されないので更新します。

 列数が少ないマスター テーブルだし、金額 (単価) だから合計しても意味がないんだけれど、、、ピボットテーブルで読み込んでいるのが下図です。 


結合したいテーブルが異なるブックや csv など、あちこちのファイルにある、読み込むときに列の追加や削除などの加工をしたい、テーブルはいらないからピボットテーブルで読み込みたい、というときは Power Query を使っています。 

ただただシンプルにくっつけて一覧を表示したい、というときは VSTACK 関数を使っています。 VSTACK の結果を参照した XLOOKUP の使い方についてはまた別で書きます。

石田 かのこ

ご相談だけでも大歓迎!
クリエアナブキが組織の課題を解決します。

087-802-1023

営業時間:平日9:00~18:00