KNOWLEDGE & INSIGHTS

2023.02.22

【業務自動化】データテーブルからのデータ抽出をUiPathで簡単に実装する方法

     

UiPathでデータテーブル操作を行うメリット

まず、RPA(UiPath)を導入する理由として考えられるのが、決まったデータを決まった形式に変換する、といったデータテーブルの操作です。実際の事例だと、毎月、データテーブルから特定の人物に特定の値が含まれるデータを抽出したExcelファイルを作成し、取引先へメールで送付する、といった自動化業務がありました。
データテーブルを抽出する操作自体は非常にありふれたものですが、人の手で実行しようと考えると時間がかかるルーチンワークです。
そこで、UiPathを利用して、データテーブルからデータを抽出する処理を自動化し、作業効率を上げる方法をご紹介致します。

UiPathのデータテーブル

UiPathには、Datatable型の変数があります。Excelや、Webブラウザの表形式データを行・列として格納できる変数型です。
このDatatable型を使用して取得したデータテーブルに対して、「特定の値の列・行を抽出する」必要は多々あるかと存じます。
こういったExcel等で作成されたデータを使用する業務を効率化するために、今回は、UiPathの「データテーブルをフィルター(UiPath.Core.Activities.FilterDataTable)」アクティビティや代入アクティビティにてSelect文を使用することで、データテーブルからの抽出を簡単に行えるように解説していきます。
Excel上で直接フィルタ機能を指定する方法も可能ではありますが、UiPathを使用するのであれば、Datatable型変数へデータを代入することで、より高速な処理が可能になります。

 

UiPathでデータテーブルからデータを抽出する方法

では、UiPathで実際にデータテーブルからデータを抽出する方法を二つ紹介します。
また、使い分けのアイデアや、実際に使用する際の注意点等も以下で解説していきます。

「データテーブルをフィルター」アクティビティの基本的な使い方

「データテーブルをフィルター(UiPath.Core.Activities.FilterDataTable)」アクティビティは、UiPath標準のアクティビティです。
アクティビティをドロップすると、加工前のDatatable型変数の入力欄、フィルターを設定ボタン、加工後のDatatable型変数の入力欄が記載されたパネルが設定されます。
「フィルターを設定」ボタンを押下することで、詳細設定ポップアップが開くため、フィルター条件の設定にはこちらを使用します。
列の入力欄には、フィルターを設定したい行もしくは列を入力します。列・行の番号でも、ヘッダー(先頭列・先頭行)の指定でも選択が可能です。
操作で、その列に入っている値がどうあるべきかを指定します。「<」であれば、当該列の値が右の「値」入力欄に入っている数字よりも小さい場合に抽出する形となります。
各操作の内容も含めて、下図にまとめております。

Select文の基本的な使い方

Select文はアクティビティではなく、コードです。UiPathではVB.netを使用できるため、コードで直接指定することが可能になっています。
こちらを使用する場合は、代入アクティビティを使用します。
代入アクティビティの左辺に加工後のDatatable型変数を入力します。右辺には、以下の式を入力します。
dt_BeforeProcessing.select(“[列名] = ‘フィルタ条件'”).CopyToDataTable
(※dt_BeforeProcessingは加工前のDatatable型変数を指定)
これで、左辺のDatatable型変数に、dt_BeforeProcessingから列名がフィルタ条件になっている列を抽出し、格納が可能です。
また、Select文を使用する際の注意点として、不等号やContainsが使用できない点には注意が必要です。

「データテーブルをフィルター」とSelect文の使い分け

どちらもDatatable型変数の中身から特定の列・行を取り出す操作としては大きな差がないように見受けられますが、使い分けの方法が挙げられます。
まず、特定の数値以上、特定の数値以下といった条件で抽出する場合は、「データテーブルをフィルター」アクティビティの使用が望ましいでしょう。
「データテーブルをフィルター」アクティビティでは、操作で「<」や「>」の指定が可能です。そのため、例えば「A列に入っている数値が80以上の場合のデータテーブルを抽出したい」場合であれば、列をA列に指定し、操作を「>」、値を「80」にすることでA列の値が80以上の列のみ抽出される形となります。
より高度な行と列の絞り込みで抽出したい場合は、Select文の使用が望ましいです。
例えば、A列が特定の値になっている際の、B列の特定の行の値を求めたいときは、Select文を1行作成すると容易に抽出が可能です。
下図の左側に表示されているのが使用するサンプルのデータテーブル(Excel)です。
こちらから、品名が「ぶどう」のとき、1行目に表示される価格の値(=300)を抽出してみます。
dt_BeforeProcessing.Select(“[品名] = ‘ぶどう'”)(0)(“価格”)
上記の式を代入アクティビティの右辺に入力することで、左辺の変数に300が代入されます。
また、現在「ぶどう」と入っている品名入力欄には変数を適用することも可能です。この場合は、以下のように指揮を作成してください。
dt_BeforeProcessing.Select(“[品名] = ‘ & FruitName & ‘”)(0)(“価格”)
変数(ここでは仮にFruitNameとしています)の周りを半角の「&」で囲うことで、変数として認識されます。
上記の特徴から、下記の形で使い分けられると考えられるでしょう。
・「データテーブルをフィルター」アクティビティを使用する
 ⇒特定の列に入っている値が、ある数値よりも大きい/小さい行の一括抽出
 ⇒複数の列から抽出したい条件を設定し、行を一括抽出

・Select文を使用する
 ⇒特定の列に特定の値が入っているとき、特定の値/行数の行に入っている値を抽出

応用的な使い方

データ量の多いデータテーブルを扱う際は、どちらかだけを使用していると非常に時間がかかってしまうケースがあります。
大量のデータの中から特定の値を絞り込みたい場合は、まず「データテーブルをフィルター」アクティビティを使用してデータの総量を削減してから、Select文を使用して絞り込む形で組み合わせて使用することで、データ処理の時間が短縮できる可能性があります。
使用している表ではデータ数が少ないですが、この場合では「データテーブルをフィルター」アクティビティで価格が100円のデータを絞り込んだのち、抽出したデータテーブルにSelect文を使用して先頭行の品名を取り出したり、販売に〇がついている品名を取り出したり、といった形が考えられます。

データテーブルからデータを抽出する際の注意点

特定の値を抽出する作業の場合、データによっては抽出対象が含まれていない場合を考慮する必要があります。
先程から使用している表で例えると、「価格が200円の品名を抽出する」と指定した際、この表であれば「バナナ」が抽出されます。ですが、例えば前月の同じ形式のデータで、ちょうど200円の品がなかった場合を想定します。この場合、「価格が200円の品名を抽出する」とアクティビティで指定しても、代入される値はNullになります。
このままだと、抽出したデータを別の表やアプリケーションに代入しようとするとエラーとなってしまいます。
そのため、データを抽出(「データテーブルをフィルター」アクティビティ、Select文を使用のどちらの場合でも)した後の処理を行う前に、条件分岐を設定することが望ましいです。
条件分岐の式としては、「dt_AfterProcessing isnot NullorEmpty」として、データテーブルの中にデータが格納されているかを判定する形が良いです。
また、もしデータが格納されていなかった場合は、そのあとの処理に合わせてElseにアクティビティを設定することが望ましいです。当該データテーブルの処理をスキップして次の処理に移ったり、ポップアップで一文の警告を出したりといった形が考えられます。

 

アクティビティの使い分けと組み合わせでより高速化・最適化を図る

今回の記事で解説したアクティビティおよび式は、どちらも大枠で考えると「データテーブルから特定のデータ・値を抽出する」という点では相違ありません。ですが、細かい仕様を考えていくと、それぞれに向き不向きがあることがわかります。
同様のアクティビティであっても、活用できるタイミングや、データの処理準、処理件数によって使用順を組み合わせることで、業務の効率化および高速化が図れるでしょう。
RPA(UiPath)を使用することで、時間や手間のかかるデータテーブルからのデータ抽出が簡単に行えるようになります。もし現在Excelからのデータ抽出業務に膨大な時間を割かれていてお困りであれば、弊社では業務改善からコンサルタント・UiPathの開発エンジニアが対応可能です。
この記事が皆様の業務改善の一助になりましたら幸いです。

 

【参考】

熊谷菜海

アーツアンドクラフツConsulting & Solution事業部/プログラマー。得意分野はRPA