Excel(エクセル)には、日々の集計やデータ整理を効率化するためのさまざまな関数が用意されています。
なかでも近年注目されているのが、Microsoft 365やExcel 2024以降で利用できる動的配列関数です。
今回は、複数シートや複数範囲のデータを、VBAを使わずに1つのシートへまとめて表示できるVSTACK(ブイスタック)関数とHSTACK(エイチスタック)関数をご紹介します。
これまでExcelで複数範囲のデータを結合する場合、コピー&ペーストで手作業する、またはVBAを使って処理するケースが一般的でした。しかし、VSTACK関数/HSTACK関数を使えば、関数だけで複数の表やリストを縦方向・横方向にまとめて表示できます。
VSTACK関数は、指定した配列やセル範囲を縦方向に結合して表示する関数です。
一方、HSTACK関数は、指定した配列やセル範囲を横方向に結合して表示できます。
元データを直接編集せずに、結合結果だけを別シートに表示できるため、月別データや部署別データ、複数シートに分かれた一覧をまとめたいときに便利です。
これらの関数のメリットは、主に以下の通りです。
ここからは、VSTACK関数/HSTACK関数の基本的な使い方や、複数シートのデータを1シートにまとめる際のポイントをわかりやすく解説します。
DX/Office活用トレーナー 本多 瑞季(ほんだ みずき)
現場の業務フローを起点に、Excel・Copilot・Power Automateを“使いこなせる状態”まで伴走するトレーナー。操作説明にとどまらず、部署や役割に合わせた課題設計で、研修翌日から成果を出せるよう設計します。
※DX人財育成サービスの公式サイト
VSTACK関数とは、配列を垂直方向に順番に追加して、大きな配列を返す関数です。
VSTACK関数の基本構文は下記の通りです。
array1、array2は追加する配列(範囲)を表します。
追加する配列の列数は同じである必要があります。
VSTACK関数では、関数の計算結果がスピルされ複数行列にわたって範囲として返ってきます。
ここから、VSTACK関数を使って下図のような顧客データを統合する基本的な方法をご紹介します。
まず、【G9】セルを起点に、セル範囲【A2:E7】と【G2:K7】のデータを縦方向に結合して表示してみましょう。
(1)【G9】セルに「=VSTACK」と入力
(2)セル範囲【A2:E7】を選択し、「,」を入力後セル範囲【G2:K7】を選択しデータを確定する
入力する数式は「=VSTACK(A2:E7,G2:K7)」となります。
VSTACK関数の戻り値はスピルを利用して、範囲が返されます。表示形式は反映されないため、入会日と会員期限にはシリアル値が表示されます。
配列を横直方向に順番に追加して、大きな配列を返す関数です。
HSTACK関数の基本構文は下記の通りです。
array1、array2は追加する配列(範囲)を表します。
追加する配列の行数は同じである必要があります。
HSTACK関数では、関数の計算結果がスピルされ複数行列にわたって範囲として返ってきます。
実際に入力をしてみましょう。
ここから、HSTACK関数関数を使って下図のような顧客データを統合する基本的な方法をご紹介します。
【G4】セルを起点にセル範囲【B1:D5】と【B7:D11】の顧客データを横方向に結合して表示します。
(1)【G4】セルに「=HSTACK」と入力
(2)セル範囲【B1:D5】を選択し、「,」を入力後、セル範囲【B7:D11】を選択しデータを確定
入力する数式は「=HSTACK(B1:D5,B7:D11)」になります。
先ほど同様戻り値はスピルを利用して、範囲が返されます。VSTACK関数同様、表示形式は反映されないため、入会日と会員期限にはシリアル値が表示されます。
ここではVSTACK関数の便利な使い方を5つ紹介します。
VSTACK関数を利用すると、複数シートの表を結合することも可能です。
【A2】セルを起点に「VSTACK関数_応用」シートの右側の、A社・B社・C社の表を結合して表示します。
ここではVSTACK関数と串刺し参照と呼ばれる方法を使用します。
複数のシートにまたがる同じセル範囲に対して、関数を使って参照する方法です。
通常のセル参照では、同じシート内のセルを参照することができますが、串刺しを使うことで、複数のシートにまたがる同じセル範囲を参照することができます。
たとえば、3つのシートがあって、それぞれA1セルに値が入力されているとします。このとき、以下のようにSUM関数を使用して、3つのシートのA1セルの値を合計することができます。
=SUM(Sheet1:Sheet3!A1)
この式では、「:」を使って複数のシートを範囲指定し、該当のシートのA1セルの値を合計することができます。
串刺しを使用することで、複数のシートにまたがる同じセル範囲を効率的に参照することができます。
実際に入力してみましょう。
(1)【A2】セルに「=VSTACK」と入力
(2)A社のシートのセル範囲【A2:E25】を選択し、Shiftキーを押しながら、C社のシート見出しをクリックしてEnterキーで確定
すると、下図のように数式が「=VSTACK(A社:C社!A2:E25)」となります。
これは「A社~C社のシートのセル範囲A2からE25を結合して下さい」という意味になり、シートが何枚あっても最初と最後のシートを選択するだけで結合することができます。
しかしこのままでは、各シートのセルの範囲が違うため、データがない部分が「0」と表示されてしまいます。次に紹介するFILTER関数で「0」と表示されない方法を紹介します。
ここで使用するのがFILTER関数です。
FILTER関数はその名の通り、フィルターした範囲を返すことができる関数です。
FILTER関数の基本構文は下記の通りです。
(1)【A2】セルの数式の「=」の後に「FILTER」と入力
数式は「=FILTER(VSTACK(A社:C社!A2:E25)」となります。
(2)配列の引数は先ほど入力したVSTACK関数になるため、「 ) 」の後ろに「,」を入力
(3)「含む」にVSTACK関数「VSTACK(A社:C社!A2:A25)<>0」を入力し、数式を確定
これはA列が0でないという意味になるので、空白で「0」と表示されている行が非表示になります。
表がテーブルに変換されている場合は、VSTACK関数の引数にテーブル名を指定することで、FILTER関数を使用して0の行を非表示にする必要がありません。さらに、テーブルの範囲が増えれば、VSTACK関数の戻る範囲も自動で増やすことができます。
【A2】セルを起点にA社とB社のシートのテーブルを結合しましょう。
(1)【A2】セルに「=VSTACK」と入力し、A社の表のテーブル範囲を選択
(2)続けて「,」を入力し、B社の表のテーブルの範囲を選択し、Enterキーで数式を確定
数式は「=VSTACK(テーブル1,テーブル2)」となります。
A社のテーブルにデータを追加するとどうなるか確認してみましょう。
「A社」のシートの最終行に、適当なデータを入力します。
すると、入力したVSTACK関数の配列に追加したデータが反映されます。
VSTACK関数で結合した範囲はExcelの「並べ替え」の機能を使用することができません。
配列の範囲を並べ替えするには「SORT関数」を使用します。
SORT関数の基本構文は下記の通りです。
関数の引数には配列(並べ替えたい範囲)を指定し、引数が[ ]になっている場合は省略可能です。
SORT関数では、関数の計算結果がスピルされ複数行列にわたって範囲として返ってきます。
【A10】セルを起点にセル範囲【A2:E7】と【G2:K7】のデータを縦方向に結合し、会員期限の昇順で並べ替えたデータを表示しましょう。
(1)【A10】セルに「=VSTACK(」と入力
(2)セル範囲【A2:E7】を選択肢「,」を入力後、セル範囲【G2:K7】を選択し数式を一度確定
(3)会員期限の昇順に並べ替えるために、入力した数式の「=」の後ろに「SORT(」と入力
(4)SORT関数の引数の配列は、VSTACK関数で求めた範囲のため、「)」の後ろに「,」を入力し、並べ替えインデックスに「4」(4列目)、並べ替え順序に「1」(昇順)と入力し数式を確定
すると、縦方向に結合し、会員期限の昇順で並べ替えたデータが表示されます。
XLOOKUP関数は、指定された範囲または配列から検索して、最初に見つかった値に対応する項目を返す関数です。従来はVLOOKUP関数またはHLOOKUP関数を使用していましたが、ExcelのバージョンがMicrosoft365またはExcel2021であればXLOOKUP関数が利用できます。
XLOOKUP関数の数式は下記の通りです。
6つの引数のうち、検索値、検索範囲、戻り範囲の3つは必須、[見つからない場合]、[一致モード]、[検索モード]の3つは省略可能な引数です。
【A10】セルに入力された氏名を検索値として、付随する情報を表示します。
表の範囲が2つに分かれている場合、XLOOKUP関数の引数の検索範囲にVSTACK関数を使用することで、複数の範囲から検索値を探すことができます。
(1)【B10】セルに「=XLOOKUP」と入力
(2)【A10】セルをクリックし、コピーした際に検索値がA列から移動しないように、「$A10」とする
「$」の入力にはF4キーの利用が便利です。
(3)続けて検索範囲にVSTACK関数を利用して、「VSTACK(A2:A7,G2:G7)」と入力
検索範囲は「氏名」の範囲から移動しないので絶対参照「VSTACK($A$2:$A$7,$G$2:$G$7)」とする
(4)戻り範囲は性別の範囲のため、VSTACK関数を利用して、「VSTACK(B2:B7,H2:H7)」と入力し数式を確定
(5)オートフィルで数式をコピー
入会日と会員期限のセルには日付の表示形式があらかじめ設定されているため、オートフィルオプションから「書式なしコピー」を選択します。
(6)検索値の名前を左の表の名前に変更し、正しい値が表示されることを確認
VSTACK(ブイスタック)関数やHSTACK(エイチスタック)関数を使えば、複数シートや複数範囲に分かれたデータを、VBAを使わずに1つのシートへまとめて表示できます。
これまで手作業でコピー&ペーストしていた集計作業も、関数を活用することで更新しやすくなり、作業時間の短縮やミスの削減につながります。
一方で、実際の業務では「シートごとに項目名が違う」「データの形式が揃っていない」「関数を入れた後の運用ルールが決まっていない」など、関数だけでは解決しきれない課題が出てくることも少なくありません。
せっかく便利な関数を使っても、元データの作り方や運用ルールが整っていなければ、結局メンテナンスに手間がかかってしまうこともあります。
コクーの「EXCEL女子」では、Excelを使ったデータ整理・集計・レポート作成・業務効率化をサポートしています。
VSTACK関数/HSTACK関数のような新しい関数の活用はもちろん、複数シートに分かれたデータの整理、集計フォーマットの作成、更新しやすい管理表づくりなど、日々のExcel業務を現場に合わせて支援します。
「毎月の集計作業に時間がかかっている」
「複数ファイル・複数シートのデータをまとめるのが大変」
「Excelをもっと効率的に使いたいが、社内に詳しい人がいない」
このようなお悩みがあれば、ぜひEXCEL女子にご相談ください。
Excel業務のムダを減らし、担当者に依存しない“続けられる仕組み”づくりをサポートします。