いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)VSTACK/HSTACK関数の使い方

 Googleスプレッドシートで2023年2月より使用可能となったVSTACK/HSTACK関数の使い方についてです。

  • 「=VSTACK(範囲1,範囲2)」という式で、2つの範囲を縦に結合できます。3つ以上の結合も可能です。
  • 同様にHSTACK関数では複数の範囲を横に結合した結果が得られます。
  • 従来の「={範囲1;範囲2}」や「={範囲1,範囲2}」といった結合の仕方と異なり、列数(行数)が異なる範囲を結合できる特徴があります。

機能と構文

 VSTACK関数は指定した複数の範囲を結合を縦方向に結合した結果を返します。
 同様にHSTACK関数は横方向に結合した結果を返します。
 構文は次のとおりです。

VSTACK(範囲 1[, 範囲 2, 範囲3...])
HSTACK(範囲 1[, 範囲 2, 範囲3...])

 第3引数以降を使って3つ以上の範囲を指定できます。
 通常は2つ以上の引数を使用しますが、構文上は第1引数だけが必須で第2引数以降が任意です。

基本的な使用例

 2つの関数の違いは結合の方向だけですので、以下ではVSTACK関数の実例を中心に紹介します。
 次の画像ではVSTACK関数を使い、B3:D6とC10:D11の2つの範囲(表の見出しを含まないことに注意)を縦に結合した結果を得ています。

 G3セル

=VSTACK(B3:D6,C10:E11)

 
 画像からわかるように2つの範囲がもともと縦方向に並んでいる必要はありませんし、どのような位置関係でも構いません。



 次の例では3つの範囲を結合しています。
 また、3つの範囲は指定した順に上から並んでおり、指定の順序により並べ替えられることもわかります。

 G3セル

=VSTACK(B15:D15,C10:E11,B3:D6)

 


 次の画像では最初の例と同じく2つの範囲を結合していますが、2つの範囲の列数が異なっています。
 このような場合でも結合はされるものの、それぞれの範囲は左寄せされる形で結合され、列が足りない部分は#N/Aエラーで埋められます。

 


 このエラーについて(WRAPROWS関数などのように)代わりの値を出力する機能はありません。
 必要であればIFERROR関数やIFNA関数を使って別の値に変換することとなります。次の画像では空文字列(="")に置き換えています。

 F3セル

=IFNA(VSTACK(B3:D6,C10:D11),"")

 エラーのセルに表示されるポップアップではIFERRORを使うように推奨されますが、#N/AエラーなのでIFNAを使うのが妥当かと思います。
 当然ながら元の範囲にあった#N/Aエラーも置き換えられてしまいます。
 また、「=IFNA(VSTACK(B3:D6,C10:D11),)」とすれば空文字列ではなく空白セルに変換できます。



 次の画像ではHSTACK関数を使って2つの範囲を横に結合しています。

 G3セル

=HSTACK(B3:D6,C10:E11)

 結合の方向が異なるだけで、その他についてはVSTACK関数と全く同じです。

従来の配列記法との違い

 これまでも「={範囲1;範囲2}」という式で縦に結合したり、「={範囲1,範囲2}」という式で横に結合することができました。
 これはVSTACK/HSTACK関数の機能と全く同じです。

 G3セル

={B3:D6;C10:E11}

 


 しかし列数(行数)が異なる場合に違いが現れます。
 この記法の場合、列数(行数)が揃っていないと結合されず単にエラーとなります。

 ただ、列数(行数)が異なる表をムリヤリ結合するというケースもあまりないと思いますし、何より式が簡潔にまとまるのでこれらの記法も依然として実用的です。