
データを受け取った後、手作業で統合しなければならなかった経験はありませんか?これは面倒な作業で、ミスも起こりやすいものです。データセットが同じ構造であれば3D参照を使用できますが、設定が面倒でミスも起こりやすいです。Microsoft Excelの新しいVSTACK()関数を使えば、複数の列のデータやデータセット全体を1つの長いデータリストに統合できます。
このチュートリアルでは、VSTACK() の使い方と、その柔軟な動作をいくつか紹介します。その後、シンプルながらも一般的な実用例を見ていきます。
参照: Google Workspace vs. Microsoft 365: チェックリスト付き比較分析 (TechRepublic Premium)
Windows 10 64ビットシステムでMicrosoft 365を使用しています。Web版ExcelはVSTACK()をサポートしていますが、現時点ではMicrosoftのOffice Insider Betaチャネル経由でのみ利用可能です。このプログラムでは、以下の2つのチャネルを通じてOfficeサブスクリプション機能への早期アクセスを提供しています。
- ベータチャンネル
- 現在のチャンネル(プレビュー)
どちらのチャネルもWindowsとMacの両方のデバイスでご利用いただけます。詳しくは、管理者にお問い合わせいただくか、「Office Insiderチャネルの比較」をご覧ください。このチュートリアル用のMicrosoft Excelデモファイルをダウンロードできます。
ExcelのVSTACK()について
Excelの新しい関数VSTACK()は、配列を順番に追加して、より大きな配列を返します。ここで言う「配列」とは、単に複数の項目を意味します。つまり、この関数は複数の値を関数の右下と左下のセルに流し込むことで、動的な単一の値リストを結合します。
VSTACK() の構文は単純で、次のように値への参照のみが必要です。
VSTACK(array1, [array2], …)
必須の引数array1は値の列を参照する引数で、複数の配列を参照できます。元のデータは、通常のデータ範囲またはTableオブジェクトです。この関数の優れた点の一つは、参照する配列のサイズが同じである必要がないことです。
VSTACK() は、参照された値を引数の順序で返します。配列の列数が選択された配列の最大幅よりも少ない場合、#N/A エラーが表示されることがあります。このような場合は、VSTACK() を IFERROR() 関数で囲むことで、これらのエラーを回避できます。
ここで、VSTACK() の簡単な例を見てみましょう。
ExcelでVSTACK()を使う方法
値や配列が連続していない場合は、VSTACK()を使ってそれらを1つのリストにまとめることができます。例として、F3の関数を見てみましょう。
=VSTACK(D3:D7,D11:D13)
図Aに示すように、D3:D7とD11:D13の両方から金額値を1つのリストとして返します。この関数は、引数を満たすために必要な数のセルを消費し、下のセルにまたがる配列を返します。
図A

ご覧の通り、この関数はD11:D13の値をD3:D7のリストに追加します。これはD3:D7が最初の引数だからです。G3の関数は
=VSTACK(D11:D13,D3:D7)
引数を逆にして、列 G の結果リスト内の順序を逆にします。
ここまでは参照が同じ列にありました。しかし、これは必ずしも必要ではありません。図Bに示すように、VSTACK()は2つの異なる列(D3:D7とG3:G10)の値を結合します。値が異なる列から取得されているだけでなく、G3:G10にはD3:D7よりも多くの値が含まれています。これはVSTACK()にとって問題ではありません。
図B

VSTACK() が配列を引数としてどのように扱うかを示す、もう1つの簡単な例を見てみましょう。図Cは、 J2 関数の結果を示しています。
=VSTACK({"Region","Amount"},C3:D7,C11:D13)
この関数は 2 列のリストを追加し、{“Region”,”Amount”} 配列によって両方の列の見出しを入力します。
図C

この関数がどのように動作するかがわかったので、実際の例で使用してみましょう。
ExcelでVSTACK()を使用して月次テーブルを統合する方法
よくあるニーズとして、異なるシートにあるデータを結合することが挙げられます。例えば、13枚のシートがあり、それぞれに月ごとのシートがあり、さらに1枚のシートにそれらのデータ範囲がすべて1つの長いリストとしてリストされているとします。各月の末日のデータをその最終リストにコピーするか、VSTACK() を使用することもできます。
図Dはシンプルな表で、シート名は「January」です。タブを見ると、さらに12枚のシートがあることがわかります。これらのシートをすべて1つの簡単な関数で結合できるとしたらどう思いますか? できますよ。
図D

図Eに示すように、単純なVSTACK()関数は12個のデータ範囲すべてを追加します。また、結果には0で埋められたレコードが多数含まれていることに気付くかもしれません。関数をよく見てみましょう。
=VSTACK(January:December!B3:D12)
B3:D12 参照を実際のデータ範囲と比較すると、それぞれに多くの空白行があることがわかります。しかし、各範囲のレコード数が異なる場合、すべてのデータを確実に取得するにはこれが唯一の方法です。それでも、参照で許可されている数を超えるデータを持つテーブルが1つあり、データがまったく取得されない可能性があります。これはあまり良い解決策ではありません。
図E

簡単な解決策があります。Excelのテーブルを使うのです。データ範囲をテーブルに変換すれば、データ範囲を指定する必要がなくなります。代わりに、12個のテーブルを参照することになります。
これを実現するには、すべてのデータ範囲をテーブルに変換します。データ範囲内をクリックし、Ctrl + T キーを押して「OK」をクリックします。少し面倒ですが、時間はかかりません。次に、統合シート「2021」に移動し、最初の VSTACK() 関数を次の関数に置き換えます。
=VSTACK(Table1,Table2,Table3,Table4,Table5,Table6,Table7,Table8,Table9,Table10,Table11,Table12)
タイピングが遅い場合は、オートコンプリートリストを使ってテーブル名を入力してください。図Fに結果を示します。今回は、空の行を除いた12個のテーブルすべてを統合したリストが返されます。テーブルを更新すると、2021シートのVSTACK()関数が自動的に更新されます。結果にはセルの書式設定がコピーされないため、手動で設定する必要があります。
図F

乞うご期待
もう一つの新しい関数はHSTACK()で、これもMicrosoftのOffice Insider Betaチャンネルから入手できます。ご想像の通り、この関数はVSTACK()に似ていますが、出力は水平方向になります。この関数については、今後の記事で解説します。