Blue PrismでExcelを操作する<詳細版⑨> 列の値の重複を排除する
年末がそこそこ忙しかったけど、
年始もそれなりに働いているというか、
私、こんな働き者キャラだったっけ??
なんだかんだと理由をつけては仕事をさぼって同僚とコンビニに行く、
そういうキャラだった気がするんだけどなぁ。
Blue Prismで特定の列の値が重複している行を削除する
今回のテーマは重複削除です。
英語だとRemove Duplicatesですね。
Excelで可能な操作なので、ExcelをWindowsアプリとして操作すれば可能です。
この記事では、VBOベースで実現してみましょう。
重複をチェックして印をつけ、フィルタする
重複削除のやり方は、rpa forumにも挙がっていました。
Remove duplicate in Excel (Loop stage)
やり方はたぶん、いろいろあるのだと思います。
この記事では、かつて私が社会人一年生のころにやっていた泥臭いアルゴリズムでやってみようと思います。
(当時ってExcelに重複削除の機能はなかったんかな。。知らなかっただけか)
アルゴリズムは以下のようなものです。
- 重複をチェックする列の値で表をソート(並び替え)する
- チェック用の列を増やす
- 重複をチェックする列の値を一行ずつチェックして、直下の値と同じだったら、チェック用の列の値に重複ありのフラグを立てる(最後の行は、常に重複なし)
- 3.をすべての行に繰り返し行う
- チェック用の列の値でフィルターする
- チェック用の列を削除する
言葉で書いてもわかりにくい。実際にやってみます。
やってみた
オブジェクトの1アクションとして実装してみました。
コーディングなしです。
処理の流れは以下の通り。
まず、入力されるコレクションは、こんな感じにしました。
最初に、重複をチェックする対象の列(ここではField2)の値でソートします。
ソートには Utility - Collection Manipulation の Sort Collection が使えます。
重複チェックのための列(ここではDuplicateCheck)を追加します。
列の追加はちょっとクセがあります。。以下も参照ください。
一行ずつ値を調べ、直下の値と同じだったTrue(重複)、違っていたらFalse(重複でない)と書き込んでいきます。
最後の行は、比較対象がなく、常に重複なし(False)にします。
全行について調べ終わったら、重複チェックのための列の値をFalseでフィルタします。
Falseだらけの列を削除して出来上がりです。
まとめ
- Blue Prismで重複を削除する方法は複数ある
- 泥臭いアルゴリズム/ノンコーディングで実装してみた。できた
- 表の構造を操作する系の処理なら、だいたいのことはできる気がしてきた
昔、人が少ないことを良いことに、職場で利き茶をやった結果、
伊右衛門の味とお~いお茶の味がそっくりで驚いた。
…そんなキャラだったのになぁ。
|