前回(「複数の見積書作成を自動化」)、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
記述は簡単ですが、[フィルターオプション]のダイアログボックスでは実現できなかった高度なことを、実現できていますね。
構文に沿って記述を重ねていくことで、さらに高度な複数抽出条件なども重ねていくことができます。
基本的な構文([ ]は省略可能)は、
AdvancedFilter(Action, [CriteriaRange],[CopyToRange], [Unique])
となっており、Actionの引数には「xlFilterInPlace」(検索結果を同じ場所に出力)、もしくは「xlFilterCopy」(検索結果を別の場所に転記)などを指定します。
「xlFilterCopy」の場合に「CopyToRange」で転記先を正確に指定すれば、別ワークシートであっても、結果をはき出すことができるのです。
「CriteriaRange」は検索条件範囲を、「Unique」は重複データを除く(ture)か含む(false)かの指定をします。
まとめ
重複チェックはあなたの仕事じゃありません。オートフィルター→フィルターオプション→VBAの順で、どうしたら自動化できるか、作業の初期に考えてみましょう。
事例はとてもシンプルなものですが、実務上では、より複雑な、大容量の重複チェックをする場面が多々出てきます。
しかし、どのような場合にも、「ご自身の努力と根性」で乗り切る発想は、すぐに捨ててください。重複チェックのプログラムを自分で組んでみることは、VBA初歩の、とても良い練習になります。まずは、「Excelのどの機能を使ったら、”手抜きできる”=自動化できる、か」を、目視し始める前に考えてみてください。
Excelを使いこなせる範囲が、格段に広がりますよ。