LoginSignup
7
0

More than 1 year has passed since last update.

【UiPath】Studioにおけるフィルター操作(前編)

Last updated at Posted at 2023-06-08

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.データ準備

 より容易に本文を理解できるように、筆者は以下のサンプルデータを用意しました。
 image.png

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型の変数を作成して読み取ったデータを格納します。
 image.png
 その後、Filter Data Tableを配置して、Configure Filterをクリック、Filter Wizardで条件を設定します。今度はDepartment列が「IT部門」と「HR部門」の行を抽出して、Write RangeでFilter1のシートに書き込み、結果を見てみましょう。
 image.png
 Filter WizardでITとHR部門に該当する行を抽出
 image.png
 Finance部門が削除され、実行結果は成功でした。今度は部門を問わず、給料が20000以下の人を絞ったらどうなるのでしょうか。
 ここでまず注意しなければならないのは、Studioを用いてExcelのデータを抽出する場合、データをどのようなフォーマットで抽出するのかにより、抽出されたデータに対し数学演算ができるかどうかが変わるのです。Read Rangeのプロパティで、Read FormattingをRaw Valueに設定する場合、抽出されたデータはObject型に保持されているので、フィルター操作で、<や>といった論理演算子が効きます。しかし、ほかのモードに変更するとしたら、抽出されたデータはString型に変わってしまう恐れがあるため、論理演算子が使えなくなるのです。ちなみにですが、Read Formattingの下にあるVisible rows onlyをオフにしてください。そうしなければ、Raw Valueにしても、抽出されたデータはString型になってしまいます。
 image.png
 データ型を確認したい方は、対象列に対して、DataTypeメソッドを利用して確かめましょう。以下は実行の結果となります。「給料<20000」の人が正しく抽出されていますね!
 image.png
 では、「IT部門」や「HR部門」に所属し、且つ給料が20000以下の条件でデータを抽出してみたらどうでしょうか。Filter Wizardを開いて三つ条件とも書きましょう。
 image.png
 明らかに結果間違っています。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 の行を抽出してみます。
 image.png
 すると、結果を以下のようになりました。
 image.png
  データは削除されず、ただ非表示のように隠されていただけです。しかも、この方法は、直接に対象のシートを操作するので、もとのデータを変更してはいけない場合は、当該アクティビーを使わないほうがよいのではないかと考えております。

6.最後に

 Filter Data Table ActivityとExcel Filter Activityとも、コードをいじらずにExcelのデータが抽出できる、非常に便利な方法だと言えます。Filter Data Table Activityのメリットとして、データの源であるソースシートを変更せずにデータテーブルに対する操作のため、操作対象のシートが改ざんされたりするようなリスクはないということです。しかし、複雑条件を満たしたい場合は、Filter Wizardを繰り返して配置しなければならないので、少し不便です。それに対して、Excel Filter Activityは、データが削除せずに、非表示のように隠されいるだけなので、直接対象のシートをいじっても問題がなかれば、かなり便利な方法だと思います。
 ただし、以上の二つの方法とも、データ量が数千、ないし数万行ある場合や条件がかなり複雑になる場合では、処理のスピードが遅くなったりするようなことがあります。フィルター操作を高速化し、複雑でデータを絞りたい方は、ぜひ後編の③Selectメソッドと④LINQメソッドをご参照いただければ嬉しいです!(後編はまだ執筆中です)

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0