- Home » 
 
- エクセル関数一覧表 » 
 
- Excel関数の目次 » 
 
- 
垂直方向・水平方向へ配列を追加するVSTACK関数・HSTACK関数の使い方
 
更新:2025/9/26;作成:2022/9/6
垂直方向へ配列を追加する
 ブイ スタック
=VSTACK(array1,array2,...)
水平方向へ配列を追加する
 エイチ スタック
=HSTACK(array1,array2,...)
  - VSTACK関数・HSTACK関数がExcel for Microsoft 365 で使用することができるようになりました。(2022/9/2に確認しました) 
  Excel2024(2024/10/2から市販)でも使用できるようになりました。 
VSTACK関数・HSTACK関数の引数
  - 関数の引数は現時点では英語表記になっています。
VSTACK関数・HSTACK関数
  
| 引数 | 
 | 
意味 | 
| array1 | 
必須 | 
セル範囲や配列 | 
| array2 | 
省略可 | 
追加するセル範囲や配列 | 
      
    
  
 
VSTACK関数の使用例1(セル範囲を垂直に結合する)
  - 2つのデータのセル範囲 B3:E6 と G3:J6 を結合します。
D9セルに =VSTACK(B3:E6,G3:J6) と入力すると、2つのデータリストを結合することができました。
  E列の日付はシリアル値で表示されますので、表示形式を yyyy/m/d としています。
  
 
VSTACK関数の使用例2(テーブルを垂直に結合する)
  - 上の セル範囲をそれぞれテーブルに変換します。
  B2:E6セルをテーブルに変換しています。テーブル名は 鹿児島 です。
  G2:J6セルをテーブルに変換しています。テーブル名は 指宿 です。
この2つのテーブルを垂直方向へ結合します。
  D9セルには =VSTACK(鹿児島,指宿) と入力しています。引数にはテーブル名を指定します。
テーブルでは先頭行のタイトル行は無視され、データのみが結合されます。
  
 - テーブルにするとデータを追加しても、数式を修正しなくてもデータが勝手に追加されるというメリットがあります。
データの追加や削除に柔軟に対応できますので、テーブルの利用を推奨します。
  
 
  - トリム参照がExcel for Microsoft365で使用できるようになりました。
  テーブルを使わなくても数式で2つの表を縦に結合することができ、データの増減にも対応できます。
   - L2セルの数式 =VSTACK(B.:.E,DROP(G.:.J,1)) とトリム参照にしています。
  2つ目の表は DROP関数で1行目のタイトル行を除いて結合しています。
  7行目に追加したデータもしっかり追加されているのがわかります。
  
 
  - データを結合して、商品名順に並べ替えてみましょう。
SORT関数を組み合わせるだけです。
B9セルに =SORT(VSTACK(鹿児島,指宿),3) と入力しています。
  
 - Excel for Microsoft365で使用できるPIVOTBY関数を使うと、クロス集計ができます。
  =PIVOTBY(CHOOSECOLS(VSTACK(鹿児島,指宿),3),
  CHOOSECOLS(VSTACK(鹿児島,指宿),1),
  CHOOSECOLS(VSTACK(鹿児島,指宿),4),SUM)
  
  
 
  - 2つのテーブルの商品名が「バナナ」のデータを取り出してみます。
データを抽出するのに FILTER関数を利用します。
2つのテーブルの結合は VSTACK関数を使います。
FILTER関数の引数の抽出条件に「3列目が バナナ と等しい」とするために CHOOSECOLS関数を使います。
B9セルの数式は =FILTER(VSTACK(鹿児島,指宿),CHOOSECOLS(VSTACK(鹿児島,指宿),3)="バナナ") としました。
CHOOSECOLS関数の詳細な説明は 指定された行・列の配列を返すCHOOSEROWS関数・CHOOSECOLS関数の使い方 をご覧ください。
  
 
列数が異なる配列を結合すると?   topへ
  - 2R×3C の配列と 3R×2C の配列を垂直方向へ結合すると、5R×3C の配列になります。
空欄となるセルには #N/A が入力されます。
  B6セルには =VSTACK(B2:D3,F2:G4) と入力しています。
  
 - 2R×3C の配列と 3R×2C の配列を水平方向へ結合すると、3R×5C の配列になります。
空欄となるセルには #N/A が入力されます。
  B6セルには =HSTACK(B2:D3,F2:G4) と入力しています。
  
 - これらのエラーを表示したくない場合は、IFERROR関数を使います。
=IFERROR(VSTACK(B2:D3,F2:G4),"") としてエラーを非表示にすることが可能です。
  
 
  - 必要な列だけを取り出すことができます。
  なお、数式がわかりやすいように、データB2:E6はテーブル「売上表」に変換しています。
  =HSTACK(売上表[日付],売上表[商品名],売上表[販売数])
  
 
  - 列を入れ替えることもできます。
  =HSTACK(売上表[商品名],売上表[日付],売上表[販売数])
  
 
  - 適切なデータとは思えませんが・・・
  B2:E6を「鹿児島」、G2:J6を「指宿」とテーブルに変換しています。
  水平方向へ結合する場合は、=HSTACK(鹿児島,指宿) と入力します。
  下図のように、水平方向へデータが結合されます。
  
 
  - 串刺し計算はデータの位置関係がすべて同じ位置にある必要がありますが、ここでは列見出しの順番が同じである必要があります。 
行見出しが異なっているのが前と異なっています。7月のB5セルはマンゴーとなっています。8月,9月はバナナです。
また、行データの増減にも対応できます。
   - ここで使用したデータ
  3つのシートのデータはすべてテーブルにしています。データの増減と数式の見易さのためです。  - シート「7月」に「七月」というテーブルを作成しています。
  テーブルデザイン タブを開き、プロパティ グループでテーブル名を入力します。
  
 - シート「8月」に「八月」というテーブルを作成しています。
  
 - 同じように、シート「9月」に「九月」というテーブルを作成しています。
  
 
GroupBy関数やPivotBy関数を使うと簡単に計算できるようになりました
  - GROUPBY関数とPIVOTBY関数がExcel for Microsoft 365 で使用することができるようになりました。(2024/10/29に確認しました)
  
  
  
 - これらの関数とVSTACK関数を組み合わせると簡単に計算することができます。
 - これらの関数の詳細な使い方は以下のページをご覧ください。
  PIVOTBY関数でクロス集計表を作る
  GROUPBY関数を使って集計する 
  - B3セルに数式を入力しています。
  B2:E2セルのフィールド名は手入力しています。
  =GROUPBY(CHOOSECOLS(VSTACK(七月,八月,九月),1),
  CHOOSECOLS(VSTACK(七月,八月,九月),{2,3,4}),SUM)
  
   - PIVOTBY関数でも同じ計算ができます。引数の列のデータを省略しています。
  =PIVOTBY(CHOOSECOLS(VSTACK(七月,八月,九月),1),,
  CHOOSECOLS(VSTACK(七月,八月,九月),{2,3,4}),SUM)
  
 
VSTACK関数で疑似 串刺し計算(集計)を行う
  -  以前に書いた操作手順は非常に煩雑ですが、比較のために残しておきます。 
 
- 集計するシートのC2:E2セルに列見出しを入力します。
B3セルに3つのテーブルの重複しない行見出しを書き出します。
B3セルの数式は =UNIQUE(CHOOSECOLS(VSTACK(七月,八月,九月),1)) としています。
  3つのデータの結合は VSTACK(七月,八月,九月)
この結合したデータから行見出しの列を CHOOSECOLS(VSTACK(七月,八月,九月),1) で取り出しています。
ユニークな行見出しは UNIQUE関数で取り出しています。
これらの関数の詳細な使い方は CHOOSECOLS関数 UNIQUE関数 をご覧ください。
  
 - C3セルの数式は
=SUM(FILTER(FILTER(VSTACK(七月,八月,九月),
CHOOSECOLS(VSTACK(七月,八月,九月),1)=$B3),
COUNTIF(C$2,$B$2:$E$2)))
としました。
  
  
数式の説明
結合したデータ VSTACK(七月,八月,九月) から「りんご(B3セル)」のデータを取り出します。
  数式は FILTER(VSTACK(七月,八月,九月),CHOOSECOLS(VSTACK(七月,八月,九月),1)=$B3) としました。
Filter関数で データ VSTACK(七月,八月,九月),から 1列目が「りんご($B3)」であるデータを取り出しています。
  
取り出したデータでりんごの合計をするために、2列目の 128〜131の列を取り出します。
  FILTER(FILTER(VSTACK(七月,八月,九月),
CHOOSECOLS(VSTACK(七月,八月,九月),1)=$B3),
COUNTIF(C$2,$B$2:$E$2))
  ,
COUNTIF(C$2,$B$2:$E$2)は{0,1,0,0} といった配列を返しますので、2列目の 128〜131の列を取り出すことを指定しています。
これで 128〜131が取り出せたので、データを合計すればよいので、SUM関数でくくればよいことになります。
   - C3セルに入力した数式を右方向、下方向へコピーすれば完成です。
  
 
スポンサードリンク
Home » 
エクセル関数一覧表 »  垂直方向・水平方向へ配列を追加するVSTACK関数・HSTACK関数の使い方
PageViewCounter

Since2006/2/27