PR

 今回からは、また新たなサンプルをベースに、VBAの基本を学んでいくことにしましょう。

 題材として取り上げるのは、2つの表のデータを比較し差分を抽出するマクロです。実際の業務の中で、表の両方に含まれるデータ、両方に含まれないデータ、あるいは、どちらか一方に含まれるデータを抜き出したい・・・そんな場合がないでしょうか?

 このような処理は、Accessのようなデータベースソフトが得意とする分野で、クエリ(実態はSQLというデータベースを扱うための命令語)という仕組みを使って、比較的簡単な操作で表の差分データを取り出すことができます。ですが、簡単とはいっても、Accessそのものが敷居の高いアプリケーションです。

 普段使っているExcelで処理できれば、それにこしたことはありません。なによりもExcelでは、もとのデータとなる表の扱いが簡単です。たとえば、メールや他の媒体にあるデータをコピー&ペーストでシートに貼り付け、簡単に表の形に整形できます。その決まった形の表を操作するプログラムを作成しておけば、定常的に発生する作業の助けとなるはずです。

 このサンプルマクロを通じて、新たな繰り返し構文や、ビギナーが陥りやすいエラー発生の事例などを解説していきたいと思います。

差分抽出するデータのイメージを確認する

 まず、どんな状況で使うマクロなのか、その利用イメージをご説明しましょう。

 たとえばここに、定期的に内容が更新されるデータがあるとします。そのデータは簡単な操作でExcelのシート上に貼り付けてリストとして扱うことができるようになっています。データ自体はまったく不定期にレコード(一行)単位で削除されたり、あるいは新規データとして追加されたりします。追加されるデータは、リストの最後尾に追加されるとは限らず、もとのデータの任意の場所に挿入されるといった具合です。

 具体的な例で確認しましょう。わかりやすくするために、取り扱うデータは件数も少なく、項目もシンプルにしてあります。まず「更新前」シートには、更新される前の手元にある最新のデータが存在しています(図1)。そして「更新後」シートには、更新前シートに手を加えた最新データがあるものとします(図2)。ここで2つの表の違いを調べ、削除されたデータは何か、追加されたデータは何かということを、使い手がわかりやすい形で結果を表示させることが、今回のマクロの目的です。


図1 「更新前」シートのデータ。データ更新後には、3行目と6行目にある2件のデータが削除される


図2 「更新後」シートのデータ。2件のデータ削除に加え、あらたに3件のデータが追加されている

 図2と図3の場合で言えば、「更新前」シートにあるリストからは2件のデータが削除され、新たに3件のデータが追加される……そんな動作を想定して、話を進めていきたいと思います。また便宜上、それぞれのリストの列数は4列固定で、いずれも1行目に見出し行が配置されているものとします。同じアドレスは存在せず、データの増減の判断はアドレス欄をチェックして行うものと考えてください。