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

# １．はじめに
　日々の仕事においては、エクセルで保存される各種のデータを読み取り、それに対してフィルターをかけて目標データを抽出するのは、日常茶飯事のほど尋常ですが、手間がかかることもあります。特に、複雑条件でデータを抽出する場合やデータ量が膨大な場合、時間がよりかかるので、UiPath Studioを活用し、その業務を自動化するのは時間がだいぶ省けると思います。
　ただし、Studioが提供するフィルター操作の方法は、何個もあるので、どれを使えばいいかと悩んでいる方もいらっしゃるでしょう。そのため、本文はStudioが提供した各種のフィルターの処理方法を比較しながら、その使い方および違いを紹介しようとします。

# ２．Studioで利用できるフィルター操作方法
　①Filter Data Table Activity
　②Excel Filter Activity
　③Selectメソッド
　④LINQメソッド
　前編は初心者向けに、簡単ですぐ使いこなせる方法を説明しようと考えているので、①と②の方法のみ解説します。③Selectメソッドと④LINQメソッドに興味のある方は、後編のほうをご参照ください。

# ３．環境情報
　利用する環境は以下の通りとなります。
| ソフトウェア名 | バージョン情報 |
|:-----------|------------:|
| OS       | Windows10        |
| Studio     |   22.12.0    | 
| UiPath.EXCEL.Activities       | 2.6.12        | 

# ４．データ準備
　より容易に本文を理解できるように、筆者は以下のサンプルデータを用意しました。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/e8e84ffe-b186-a9b6-f352-c8fc65a3a585.png)

# ５．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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/e162f01a-1fba-633e-cbb2-683236074e54.png)
　その後、Filter Data Tableを配置して、Configure Filterをクリック、Filter Wizardで条件を設定します。今度はDepartment列が「IT部門」と「HR部門」の行を抽出して、Write RangeでFilter１のシートに書き込み、結果を見てみましょう。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/3e7634a6-f88b-f381-1ad2-851490d9869f.png)
　Filter WizardでITとHR部門に該当する行を抽出
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/3e945d5e-0af3-f9cc-29db-908ffc91fbe8.png)
　Finance部門が削除され、実行結果は成功でした。今度は部門を問わず、給料が20000以下の人を絞ったらどうなるのでしょうか。
　ここでまず注意しなければならないのは、Studioを用いてExcelのデータを抽出する場合、データをどのようなフォーマットで抽出するのかにより、抽出されたデータに対し数学演算ができるかどうかが変わるのです。Read Rangeのプロパティで、Read FormattingをRaw Valueに設定する場合、抽出されたデータはObject型に保持されているので、フィルター操作で、＜や＞といった論理演算子が効きます。しかし、ほかのモードに変更するとしたら、抽出されたデータはString型に変わってしまう恐れがあるため、論理演算子が使えなくなるのです。ちなみにですが、Read Formattingの下にあるVisible rows onlyをオフにしてください。そうしなければ、Raw Valueにしても、抽出されたデータはString型になってしまいます。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/96cf7fe3-4048-b2c9-036a-92bb98355ee6.png)
　データ型を確認したい方は、対象列に対して、DataTypeメソッドを利用して確かめましょう。以下は実行の結果となります。「給料<20000」の人が正しく抽出されていますね！
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/f2c4b861-fa57-bd84-c4d7-7b583355a12c.png)
　では、「IT部門」や「HR部門」に所属し、且つ給料が20000以下の条件でデータを抽出してみたらどうでしょうか。Filter Wizardを開いて三つ条件とも書きましょう。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/c5df05aa-bdc6-e4fc-716c-29cfe2dd3b29.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/1c18f53c-48ef-5f4e-7b1e-bf0048b9bb78.png)
　すると、結果を以下のようになりました。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334103/dca0ec58-d017-c075-3a14-3f394f5e24c0.png)
　　データは削除されず、ただ非表示のように隠されていただけです。しかも、この方法は、直接に対象のシートを操作するので、もとのデータを変更してはいけない場合は、当該アクティビーを使わないほうがよいのではないかと考えております。

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