Microsoft ExcelのVSTACK()関数を使って複数のデータセットを結合する方法 - TechRepublic

Microsoft ExcelのVSTACK()関数を使って複数のデータセットを結合する方法 - TechRepublic
ノートパソコンを見つめながら、真剣に困惑しているアフリカ系アメリカ人ビジネスマンのヘッドショット
画像: fizkes/Adobe Stock

データを受け取った後、手作業で統合しなければならなかった経験はありませんか?これは面倒な作業で、ミスも起こりやすいものです。データセットが同じ構造であれば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

VSTACK() はリストを動的配列として返します。

ご覧の通り、この関数は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() は異なる列からの値を追加できます。

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

VSTACK() を使用して、12 個のデータ範囲すべてを結合します。

図Eに示すように、単純なVSTACK()関数は12個のデータ範囲すべてを追加します。また、結果には0で埋められたレコードが多数含まれていることに気付くかもしれません。関数をよく見てみましょう。

=VSTACK(January:December!B3:D12)

B3:D12 参照を実際のデータ範囲と比較すると、それぞれに多くの空白行があることがわかります。しかし、各範囲のレコード数が異なる場合、すべてのデータを確実に取得するにはこれが唯一の方法です。それでも、参照で許可されている数を超えるデータを持つテーブルが1つあり、データがまったく取得されない可能性があります。これはあまり良い解決策ではありません。

図E

参照先のセルに返す値がない場合、VSTACK() は 0 を返します。

簡単な解決策があります。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()に似ていますが、出力は水平方向になります。この関数については、今後の記事で解説します。

Tagged: