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

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

ノン・プログラマー、仕事のためのマクロ・VBA(5)

重複チェック、目視で間違ってはいませんか?

それ、VBAの仕事です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

これ、Excelの仕事です。

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

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

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

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

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

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

そこで、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

記述は簡単ですが、[フィルターオプション]のダイアログボックスでは実現できなかった高度なことを、実現できていますね。

構文に沿って記述を重ねていくことで、さらに高度な複数抽出条件なども重ねていくことができます。

基本的な構文([ ]は省略可能)は、

AdvancedFilter(Action, [CriteriaRange],[CopyToRange], [Unique])

となっており、Actionの引数には「xlFilterInPlace」(検索結果を同じ場所に出力)、もしくは「xlFilterCopy」(検索結果を別の場所に転記)などを指定します。

「xlFilterCopy」の場合に「CopyToRange」で転記先を正確に指定すれば、別ワークシートであっても、結果をはき出すことができるのです。

「CriteriaRange」は検索条件範囲を、「Unique」は重複データを除く(ture)か含む(false)かの指定をします。

まとめ:重複チェックはあなたの仕事じゃありません。オートフィルター→フィルターオプション→VBAの順で、どうしたら自動化できるか、作業の初期に考えてみましょう。

事例はとてもシンプルなものですが、実務上では、より複雑な、大容量の重複チェックをする場面が多々出てきます。

しかし、どのような場合にも、「ご自身の努力と根性」で乗り切る発想は、すぐに捨ててください。重複チェックのプログラムを自分で組んでみることは、VBA初歩の、とても良い練習になります。まずは、「Excelのどの機能を使ったら、”手抜きできる”=自動化できる、か」を、目視し始める前に考えてみてください。

Excelを使いこなせる範囲が、格段に広がりますよ。

小さなお悩みでも、
お気軽にご相談ください!

お急ぎの方はお電話にてお問い合わせください

050-6867-2130
せるワザロゴ

セルワザでは、役に立つEXCELワザをご紹介しております!