スプレッドシートで、月別や支店別の表を1つにまとめたいことってありますよね。1月分の売上データの下に2月分を追加したり、東京支店と大阪支店の一覧をつなげたり。手作業でコピーすると、行がズレたりヘッダーが重複したりで大変です。
VSTACK関数を使えば、複数の表を数式ひとつで縦方向に結合できます。元データが更新されれば結合結果も自動で反映されるので、メンテナンスの手間もかかりません。
この記事では、VSTACK関数の基本から、HSTACK関数や中カッコ配列記法との違いまでわかりやすく解説します。
スプレッドシートのVSTACK関数とは?
VSTACK関数(読み方: ブイスタック関数)は、複数の配列やセル範囲を縦方向(垂直方向)に結合する関数です。「V」はVertical(垂直)、「STACK」は積み重ねるという意味で、表を縦に積み重ねるイメージです。
たとえば、3行の1月売上と3行の2月売上を結合して、6行の売上一覧表を作れます。元データと数式でつながっているため、元データを変更すれば結合結果も自動で更新されますよ。
VSTACK関数にできることをまとめると、次のとおりです。
- 複数の表やセル範囲を縦方向に結合する
- 引数を追加するだけで3つ以上の表もまとめて結合できる
- 列数が異なる表を結合した場合、不足列は自動で補完される
- FILTER関数やSORT関数と組み合わせて結合後のデータを加工できる
NOTE
VSTACK関数はGoogleスプレッドシート独自の関数ではなく、ExcelのMicrosoft 365やExcel 2024でも使用できます。ただし、Excel 2021以前のバージョンでは使えません。
VSTACK関数の基本構文
=VSTACK(配列1, [配列2], ...)
カッコの中に、縦方向に結合したい範囲を順番に指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列1 | 必須 | 結合する最初のセル範囲または配列 |
| 配列2以降 | 任意 | 追加で結合するセル範囲または配列(最大254個) |
結合したい表をカンマ区切りで並べるだけのシンプルな構文です。引数は最大254個まで指定できますが、実務では2〜4個程度を使うことがほとんどですよ。
列数が異なる表を結合した場合
VSTACK関数では、結合する表の列数が異なっても結合自体は成功します。ただし、列数が少ない側の不足分は#N/Aエラーで自動的に埋められます。
たとえば、3列の表と5列の表を結合すると、3列の表側の4〜5列目に#N/Aが入ります。この#N/Aを消したい場合は、IFERROR関数で囲みましょう。
=IFERROR(VSTACK(A1:C3, A5:E7), "")
これで#N/Aの部分が空白に置き換わります。列数が異なる表を扱うときは、セットで覚えておいてくださいね。
VSTACK関数の基本的な使い方
ここでは、月別の売上データを使ってVSTACK関数の基本操作を紹介します。
サンプルデータ
A1:C4に1月の売上データ、A6:C8に2月の売上データが入っているとします。
1月売上(A1:C4):
| A | B | C | |
|---|---|---|---|
| 1 | 担当者 | 商品 | 売上 |
| 2 | 佐藤 | 商品A | 50,000 |
| 3 | 田中 | 商品B | 30,000 |
| 4 | 鈴木 | 商品C | 45,000 |
2月売上(A6:C8):
| A | B | C | |
|---|---|---|---|
| 6 | 佐藤 | 商品A | 55,000 |
| 7 | 田中 | 商品B | 28,000 |
| 8 | 鈴木 | 商品D | 60,000 |
2つの表を縦に結合する
出力先のセル(たとえばE1)に以下の数式を入力して、Enterを押します。
=VSTACK(A1:C4, A6:C8)
| E | F | G | |
|---|---|---|---|
| 1 | 担当者 | 商品 | 売上 |
| 2 | 佐藤 | 商品A | 50,000 |
| 3 | 田中 | 商品B | 30,000 |
| 4 | 鈴木 | 商品C | 45,000 |
| 5 | 佐藤 | 商品A | 55,000 |
| 6 | 田中 | 商品B | 28,000 |
| 7 | 鈴木 | 商品D | 60,000 |
1月の売上データの下に2月のデータがきれいに結合されました。1つの数式を入力するだけで、7行分のデータがスピルで自動展開されます。
3つ以上の表を結合する
結合する表が3つ以上ある場合も、カンマで区切って引数を追加するだけです。
=VSTACK(A1:C4, A6:C8, A10:C12)
1月・2月・3月の売上データを一気に結合できます。月次データが増えても数式に追加するだけなので、管理がラクですよ。
VSTACK関数の実務活用パターン
パターン1: ヘッダーを除外して結合する
月別データを結合するとき、各テーブルにヘッダー行があると重複してしまいますよね。1つ目の表はヘッダー込み、2つ目以降はヘッダーを除外して結合しましょう。
=VSTACK(A1:C4, A7:C8)
2つ目の範囲をヘッダー行の次(A7)から指定すれば、ヘッダーの重複を防げます。テーブルが多い場合はこのパターンを基本にしてくださいね。
パターン2: FILTER関数と組み合わせて絞り込む
複数の表を結合した後、条件に合うデータだけ抽出したいことがありますよね。FILTER関数と組み合わせましょう。
=FILTER(VSTACK(A2:C4, A6:C8), VSTACK(C2:C4, C6:C8)>=50000)
VSTACKで結合した表に対して、売上が50,000以上のデータだけを抽出しています。条件列もVSTACKで結合するのがポイントです。
パターン3: SORT関数と組み合わせて並べ替える
結合したデータを特定の列で並べ替えたい場合は、SORT関数が便利です。
=SORT(VSTACK(A2:C4, A6:C8), 3, FALSE)
第2引数の「3」は結合後の3列目(売上)を基準にソートします。第3引数のFALSEは降順です。結合と並べ替えが1つの数式で完結しますよ。
パターン4: 別シートの表を結合する
別シートにある表を縦に結合することもできます。
=VSTACK(A1:C4, '2月'!A1:C4, '3月'!A1:C4)
シート名をシングルクォーテーションで囲んで指定します。月別に別シートで管理しているデータを、1つの一覧表にまとめたいときに便利ですよ。
パターン5: UNIQUE関数で重複なしリストを作る
複数の範囲から重複を除外した一覧を作るパターンです。
=UNIQUE(VSTACK(A2:A10, D2:D10))
2つの列を縦に結合した後、UNIQUE関数で重複行を除外しています。部署名や商品名などの一意なリストを作りたいときに使えます。
HSTACK関数との違い・使い分け
VSTACK関数には、ペアとなるHSTACK関数があります。どちらも表を結合する関数ですが、結合の方向が異なります。
| 比較項目 | VSTACK関数 | HSTACK関数 |
|---|---|---|
| 結合方向 | 縦方向(下に積み重ねる) | 横方向(右に並べる) |
| 語源 | Vertical Stack(垂直に積む) | Horizontal Stack(水平に積む) |
| 結果の行数 | 各配列の行数の合計 | 各配列の行数の最大値 |
| 結果の列数 | 各配列の列数の最大値 | 各配列の列数の合計 |
| サイズ不一致時 | 不足列を#N/Aで埋める | 不足行を#N/Aで埋める |
| 主な用途 | 月別・支店別データを縦にまとめる | 項目(列)を横に追加する |
使い分けはシンプルです。
- 行(データ件数)を増やしたい → VSTACK関数
- 列(項目)を増やしたい → HSTACK関数
たとえば「1月〜3月の売上データを1つの表にまとめたい」ならVSTACK関数です。「社員名簿に評価列を追加したい」ならHSTACK関数を使いましょう。
TIP
VSTACKとHSTACKは組み合わせて使うこともできます。VSTACKで月別データを縦に結合してから、HSTACKで集計列を横に追加する、といった使い方も可能ですよ。
中カッコ{配列}記法との違い・使い分け
スプレッドシートには、中カッコ {} を使って配列を作る記法があります。VSTACK関数と似た結果を得られますが、いくつかの違いがあります。
中カッコ配列記法とは
中カッコの中でセミコロン区切りにすると、縦方向に結合できます。
={A1:C4; A6:C8}
これは =VSTACK(A1:C4, A6:C8) とほぼ同じ結果になります。なお、カンマ区切り {A1:C4, A6:C8} にすると横方向の結合(HSTACK相当)になります。
VSTACK関数と配列記法の比較
| 比較項目 | VSTACK関数 | 中カッコ配列記法 |
|---|---|---|
| 構文 | =VSTACK(範囲1, 範囲2) | ={範囲1; 範囲2} |
| 列数不一致時 | #N/Aで自動補完 | エラーになる場合がある |
| 3つ以上の結合 | カンマで追加するだけ | ネストが深くなりがち |
| 他関数との組み合わせ | FILTER・SORTの引数に直接渡せる | 配列記法ごと渡す必要がある |
| 可読性 | 関数名から意図が明確 | 慣れないと読みにくい |
| Excel互換性 | あり(Microsoft 365) | Sheets固有の記法 |
使い分けの目安は次のとおりです。
- 列数が異なる表を結合する、3つ以上の表を結合する → VSTACK関数
- 列数が同じ2つの表をサッと結合したい → 中カッコ配列記法
中カッコ記法は手軽ですが、列数が異なる表を結合すると意図しない結果になることがあります。VSTACK関数は列数不一致を#N/Aで自動補完するため、安全に使えますよ。
TIP
中カッコ配列記法はGoogleスプレッドシート特有の記法です。Excelとの互換性を意識する場合は、VSTACK関数を使うのがおすすめです。
よくあるエラーと対処法
VSTACK関数はシンプルですが、使い方によってはエラーが発生します。
| エラー | 原因 | 対処法 |
|---|---|---|
#REF! | 出力先のセルに既にデータがある | 出力先の範囲を空にしてください |
#REF! | 参照先の行や列が削除された | 参照先セルが存在するか確認してください |
#N/A | 列数が異なる表を結合した | IFERRORで空白に置換してください |
#NAME? | 関数名のスペルミス | 「VSTACK」のスペルを確認してください |
#ERROR! | 引数にセル範囲以外の不正な値を指定した | セル範囲または配列を正しく指定してください |
特に注意したいのが #N/A です。これはエラーではなく、列数不一致時の仕様による自動補完です。見た目が気になる場合はIFERROR関数で対処しましょう。
=IFERROR(VSTACK(A1:C3, A5:E7), "")
TIP
「出力先のセルに既にデータがある」ケースが最も多いトラブルです。数式を入力するセルの下側に、結合後の行数分の空きスペースを確保してくださいね。
まとめ
VSTACK関数は、複数の表やセル範囲を縦方向に結合するための関数です。数式ひとつでデータを積み重ねでき、元データの更新も自動で反映されます。
この記事のポイントをおさらいしておきましょう。
- VSTACK関数は
=VSTACK(範囲1, 範囲2)で、表を縦方向に結合する - 引数をカンマで追加するだけで、3つ以上の表もまとめて結合できる
- 列数が異なる表を結合すると、不足列は#N/Aで埋まる。IFERRORで対処する
- HSTACK関数はペア関数で、横方向に結合する。行を増やすならVSTACK、列を増やすならHSTACK
- 中カッコ配列記法
={範囲1; 範囲2}でも縦結合できるが、列数不一致時はVSTACK関数のほうが安全 - FILTER関数やSORT関数と組み合わせれば、結合と加工が1つの数式で完結する
まずは =VSTACK(A1:C3, A5:C7) のシンプルな縦結合から試してみてください。月別データの集約や支店別データの統合など、使い道がどんどん広がりますよ。
