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