1.はじめに
日々の仕事においては、エクセルで保存される各種のデータを読み取り、それに対してフィルターをかけて目標データを抽出するのは、日常茶飯事のほど尋常ですが、手間がかかることもあります。特に、複雑条件でデータを抽出する場合やデータ量が膨大な場合、時間がよりかかるので、UiPath Studioを活用し、その業務を自動化するのは時間がだいぶ省けると思います。
ただし、Studioが提供するフィルター操作の方法は、何個もあるので、どれを使えばいいかと悩んでいる方もいらっしゃるでしょう。そのため、本文はStudioが提供した各種のフィルターの処理方法を比較しながら、その使い方および違いを紹介しようとします。
2.Studioで利用できるフィルター操作方法
①Filter Data Table Activity
②Excel Filter Activity
③Selectメソッド
④LINQメソッド
前編は初心者向けに、簡単ですぐ使いこなせる方法を説明しようと考えているので、①と②の方法のみ解説します。③Selectメソッドと④LINQメソッドに興味のある方は、後編のほうをご参照ください。
3.環境情報
利用する環境は以下の通りとなります。
ソフトウェア名 | バージョン情報 |
---|---|
OS | Windows10 |
Studio | 22.12.0 |
UiPath.EXCEL.Activities | 2.6.12 |
4.データ準備
より容易に本文を理解できるように、筆者は以下のサンプルデータを用意しました。
5.Studioが提供したデータフィルターの操作方法
①Filter Data Table Activity
Filter Data Table ActivityはDatatable型の変数に対して、フィルター処理を行う方法であります。それを使用する前提として、Excelシートの処理対象データをデータテーブルに抽出しなかればなりません。手順として、まずは、Excel Process Scopeをデザインパネルに配置します。次に、Use Excel FileをExcel Process Scopeの中にドラッグアンドドロップして、処理対象となるExcelファイルを選びます。最後に、Read Rangeを配置して、処理対象のシート及び読み取り範囲を指定し、OutputでDatatable型の変数を作成して読み取ったデータを格納します。
その後、Filter Data Tableを配置して、Configure Filterをクリック、Filter Wizardで条件を設定します。今度はDepartment列が「IT部門」と「HR部門」の行を抽出して、Write RangeでFilter1のシートに書き込み、結果を見てみましょう。
Filter WizardでITとHR部門に該当する行を抽出
Finance部門が削除され、実行結果は成功でした。今度は部門を問わず、給料が20000以下の人を絞ったらどうなるのでしょうか。
ここでまず注意しなければならないのは、Studioを用いてExcelのデータを抽出する場合、データをどのようなフォーマットで抽出するのかにより、抽出されたデータに対し数学演算ができるかどうかが変わるのです。Read Rangeのプロパティで、Read FormattingをRaw Valueに設定する場合、抽出されたデータはObject型に保持されているので、フィルター操作で、<や>といった論理演算子が効きます。しかし、ほかのモードに変更するとしたら、抽出されたデータはString型に変わってしまう恐れがあるため、論理演算子が使えなくなるのです。ちなみにですが、Read Formattingの下にあるVisible rows onlyをオフにしてください。そうしなければ、Raw Valueにしても、抽出されたデータはString型になってしまいます。
データ型を確認したい方は、対象列に対して、DataTypeメソッドを利用して確かめましょう。以下は実行の結果となります。「給料<20000」の人が正しく抽出されていますね!
では、「IT部門」や「HR部門」に所属し、且つ給料が20000以下の条件でデータを抽出してみたらどうでしょうか。Filter Wizardを開いて三つ条件とも書きましょう。
明らかに結果間違っています。IT部門に所属し、給料が20000以上の人が抽出されたデータに残されています。その原因は、論理演算子の優先順位に求められます。その結果をソースコードで表したら、"Department"="IT" or ("Department"="HR" and "Salary<20000")になってしまいます。しかし、正しい条件は("Department"="IT" or "Department"="HR") and "Salary<20000"ですね。そのようにしたい場合、二つのFilter Wizardにわけて書けばいいでしょう。(一つ目のFilter Wizardは部門条件、二つ目のFilter Wizardは給料条件)しかし、条件がさらに増えていく場合、Filter Wizardをさらに追加する必要があるため、少し不便です。それを解決すべく、③Selectメソッドや④LINQメソッドが利用できます。
②Excel Filter Activity
これからExcelインテグレーションのFilterアクティビティの使用方法を紹介していきます。使用手順として、まずは、Excel Process Scopeをデザインパネルに配置します。次に、Use Excel FileをExcel Process Scopeの中にドラッグアンドドロップして、処理対象となるExcelファイルを選びます。最後にFilterアクティビティを配置して、その中で処理対象のシート、読み取り範囲及びフィルターをかけたい列を指定し、Configure Filterで条件を設定します。同じく、部門がITとHR の行を抽出してみます。
すると、結果を以下のようになりました。
データは削除されず、ただ非表示のように隠されていただけです。しかも、この方法は、直接に対象のシートを操作するので、もとのデータを変更してはいけない場合は、当該アクティビーを使わないほうがよいのではないかと考えております。
6.最後に
Filter Data Table ActivityとExcel Filter Activityとも、コードをいじらずにExcelのデータが抽出できる、非常に便利な方法だと言えます。Filter Data Table Activityのメリットとして、データの源であるソースシートを変更せずにデータテーブルに対する操作のため、操作対象のシートが改ざんされたりするようなリスクはないということです。しかし、複雑条件を満たしたい場合は、Filter Wizardを繰り返して配置しなければならないので、少し不便です。それに対して、Excel Filter Activityは、データが削除せずに、非表示のように隠されいるだけなので、直接対象のシートをいじっても問題がなかれば、かなり便利な方法だと思います。
ただし、以上の二つの方法とも、データ量が数千、ないし数万行ある場合や条件がかなり複雑になる場合では、処理のスピードが遅くなったりするようなことがあります。フィルター操作を高速化し、複雑でデータを絞りたい方は、ぜひ後編の③Selectメソッドと④LINQメソッドをご参照いただければ嬉しいです!(後編はまだ執筆中です)