ノン・プログラマー、仕事のためのマクロ・VBA(5)重複チェック、目視で間違ってはいませんか? それ、VBAの仕事です。

前回(「複数の見積書作成を自動化」)、ExcelでもVBAを活用すれば、差込印刷が可能になる、という説明をしました。作業が楽になるのは良いのだけれど、自動化で多くの件数をこなせるようになったら、データのダブり(重複)チェックをどうしますか?


目視? 今すぐやめましょう。

なぜなら、あなたが間違いを起こさない保証は、どこにもないからです。

見積書や請求書を重複して発行してしまったら? それこそ炎上必至ですよね。

データ重複チェックは、機械的に、ExcelのVBAにやらせて楽をしましょう。


今回は、簡単な重複チェックの「魔法の一文」をご紹介します。




使う機能は、「フィルターオプション」です



[データ]タブの、[フィルター]ボタン(コマンド)は、日頃から事務作業に活用している人も多いでしょう。

しかし、その右下の[詳細設定]ボタン(コマンド)は使っていますか? ここには、[オートフィルター]では実現できない、さまざまなオプション機能が隠されています。


たとえば、見積書や請求書などに差し込みたい宛名リストがあるとします。




























※注:宛名リストは、法人名でも個人名でも同じように重複チェックできますが、この記事では、「すごい名前生成器」が完全ランダム生成した男性名10件、女性名10件を抽出しています。特定の個人を指すものではないダミー人名簿です。


差込印刷を使って作成する書類は20通のはずですが、複数の担当者が連絡を取り合って、台帳には5件の重複データが出てしまいました。


上記の一覧だけみて、すぐに5件のダブりを見つけられましたか?

これ、Excelの仕事です。



[オートフィルター]では、抽出した結果を別表として使用する際に、一度[コピー]→[ペースト]する必要があります。

しかし、[詳細設定]→[リスト範囲]指定&[重複するレコードは無視する]にチェック→[OK]と進むと、重複が排除された20件のレコードが、瞬時に元表と並んでペーストされます。





























これなら、重複確認がずいぶん楽に進められそうですね。

このように便利な[フィルターオプション]ですが、それでもまだ、機能には限界があります。たとえば、元表はそのまま保存しておき、「別のワークシートに抽出結果を保存しておきたい」という要望には、[フィルターオプション]のダイアログボックスでは対応できないのです。


そこで、VBAの「魔法の一文」が登場です。



AdvancedFilterは、ぜひ覚えておきたい機能


上記の[フィルターオプション]で実現したことを、VBAで記述すると、本文は一文にまとめられます。


Sub overlap_checker()
 
 Worksheets("original").Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopytoRange:=Sheets("abstraction").Range("A1"), Unique:=True

ワークシート名”original”のA列データに関して、あらかじめ作成された別ワークシート”abstraction”のセルA1を始点に、フィルター結果(重複を無視した抽出結果)をコピーするプログラムです。
 
 End Sub