テーブルではないリストをVSTACK関数で結合する


VSTACK関数は、複数のリスト(表)を縦に結合してくれる関数です。

上図は、動作を説明するために、結合前のリストと結合後のリストを同じシート上に配置していますけど、実際には、両者は別のシート上に存在しているのが普通でしょう。

さらに、結合前の元データは、上図のように「テーブルになっているべき」です。なんですがぁ~、諸事情により、テーブルではないリストもありますよね。でも、そうすると難易度が上がります。

テーブルではない、一般のワークシート上では、データの件数が分からないと困ります。よく、世間ではこんなとき「列全体を指定しましょう」みたいに安易な方法が語られます。ちなみに私は、その発想を好みません。どーーしても!列全体を指定しなければならないケースは、確かにあります。でも、何でもかんでも、とにかく列全体を指定すればいいという、いわば"逃げ"の発想はお勧めしません。きっちりと、データ範囲を明確にしましょうよ。さらに、今回のように「VSTACK関数で縦に結合」するのでしたら、列全体は指定できません。だって、結合した結果が、1,048,576行を確実に超えてしまいますからね。

こんなときは、トリム参照を使います。トリム参照とは、TRIMRANGE関数が追加されたタイミングで、Excelに追加された仕組みです。トリム参照や、TRIMRANGE関数に関しては、下記のページをご覧ください。

TRIMRANGE関数の解説

まずは、お使いのExcelで、TRIMRANGE関数が使えるかどうかを確認してください。任意のセルに「=TRIM」まで入力して、表示されるリストに[TRIMRANGE]が出てくればOKです。

本稿執筆時点(2025年2月後半)では、Microsoft 365からインストールしたProPlusで、多くの方が使える状態になっています。まだ、全員ではないです。先日名古屋でセミナーをやったときに確認したら、おひとりだけ使えない状態でした。まぁ、でも時間の問題です。ちなみに、Office 20xxなど永続ライセンス版では使えないと思います。

「=VSTACK(Sheet2!A:.C,Sheet3!A:.C)」と入力します。参照演算子に指定している「:.」がトリム参照です。

"良いニュース"と"悪いニュース"があります。良いニュースは、列全体を指定したのに、データの下に存在する100万以上の空欄セルが除去されている点です。悪いニュースの方は、一目瞭然ですね。それぞれのデータにタイトル(ヘッダ)がついています。そりゃそうです。列全体を指定したのですから、当然1行目のタイトルも含まれます。不用な1行目を除去するには、DROP関数を使います。

DROP関数は、指定したリストから、行や列を削除してくれる関数です。簡単なケースで確認しましょう。

引数の行や列にマイナスの数値を指定すると、それぞれ「下の行から○行分」「右の列から○列分」が削除されます。

今回削除したいのは、結合する元データの「上から1行分」です。

理想を言えば「テーブルになっている」ことが望ましいのですが、さまざまな理由で、テーブルに変換できないケースもあるでしょう。そうなると、従来のExcelでは"非現実的"というレベルで難易度が上がります。ですが、"スピルありき"で追加されたDROP関数や、トリム参照という画期的な仕組みによって、とても簡単な方法で実現できるようになりました。もちろん、これらは「一部のExcelマニアが使う、高度なテクニック」ではありません。今の実務で、普通に求められる"Excelの基本"です。