こんにちは。完全自動化研究所の小佐井です。

この記事では、本格的なワークフローを1本作成する方法を解説しています。

この記事でわかること
・1本の本格的なワークフローの作り方
・CSVファイルとExcelドキュメントを突合する方法
・突合したデータを新しいExcelドキュメントに保存する方法

※)CSVファイルとExcelファイルはこの記事内でダウンロードできます。

※)Excelをパソコン内にインストール済みであることがワークフローを動かす前提です。

検証バージョン
OS:Windows10
UiPath Studio:バージョン2021.10.5 Community License
私の信頼性

1) IT歴20年。開発から業務改善まで幅広く経験してきました
2) 複数の企業において2016年からRPA内製化をサポートしています
3) RPA関連の書籍を4冊出版しています

この記事はUiPath Studioを使用して自動化を行っている人を対象に書いています。超初心者には難しい内容となっていることをご了承ください。

本記事のワークフローで解決するのはこのような悩みです。

毎日、 データの入ったファイルとマスタの入ったファイルをExcel上で開いて、VLOOKUP関数を使って結合させて、1つのファイルにする作業を行っている。慣れているので簡単な作業なんだけど 毎日行うのは退屈だ。。。時間もそれなりにかかるし、自分が休んだら他にやる人がいない。なんとか自動化できないものかなぁ。

こんな悩みがUiPathで解決できたら、素晴らしいですよね!

それでは、頑張ってワークフローを作成しましょう!どうぞ!

業務イメージ

最初に今から作成するワークフローの業務イメージを説明します。具体的な業務イメージを持つことで、より深く自動化業務を理解することができます。

商品を卸しているBtoBの企業の業務をイメージします(図1)。

顧客企業が商品受注システムを使って発注します。この企業では、毎朝、商品受注システムからデータをCSV形式でダウンロード、顧客ごとの営業担当者が記載された担当者マスタ(Excelファイル)と結合させて、受注明細データ(Excelファイル)を作成しています

図1:BtoB企業の業務イメージ

図1を具体的なExcelファイルのイメージで表したのが、図2です。

図2:受注明細データ[SalesDetailData.xlsx]を作成するイメージ

ワークフローの完成図

ワークフローの完成図を載せます(図3)。

ワークフローは4つのパートで構成されます。 [受注CSV読み込み]で受注CSVファイルを読み込み、 [担当者マスタ読み込み]で担当者マスタを読み込みます。[テーブルの結合]で2つのファイルを結合させて、 [Excelに書き込み]で受注明細をExcelファイルに書き込みます

図3:完成図

作成準備

ワークフローを作成する前の準備を行ってください。

STEP1

UiPath Studioを起動し、新たにプロジェクトを作成する。

STEP2

作成したプロジェクトフォルダーの中に、サンプルファイル「CusSales Data.csv」と「staffmaster.xlsx」をコピーする。

“CusSales Data.csv” をダウンロード CusSalesData.csv – 298 回のダウンロード – 36 KB

“staffmaster.xlsx” をダウンロード staffmaster.xlsx – 260 回のダウンロード – 13 KB

これで準備は完了です。

作成手順

では、全体の枠を作るところからワークフロー作成を始めていきましょう。

全体の枠を作る

STEP1

Main.xamlを開く。

[フローチャート(Flowchart)]アクティビティを追加する。

表示名を「Main」に変更する。

クラシック デザイン エクスペリエンスで解説しています

この記事はクラシック デザイン エクスペリエンスで解説しています。この記事を参考にしてワークフローを作成する場合は、以下の記事を読んでUiPath Studioをクラシック デザイン エクスペリエンスに変更してください。

STEP2

[Main]フローチャートをダブルクリックして展開し、[Main]フローチャート上に以下の4つのアクティビティを追加し、順番に流れ線で結ぶ(図4)。

[CSVを読み込み(Read CSV)]アクティビティを追加し、 表示名を「 受注CSV読み込み」にする。

[Excel アプリケーションスコープ(Excel Application Scope)]アクティビティを追加し、表示名を「担当者マスタ読み込み」にする。

[シーケンス(Sequence)]アクティビティを追加し、表示名を「 テーブルの結合」にする。

[Excel アプリケーションスコープ(Excel Application Scope)]アクティビティを追加し、表示名を「Excelに書き込み」にする。

ワークフローの動作には関係ありませんが、メンテナンス性を高めるために各アクティビティには注釈を入れましょう。

図4:全体の枠を作る

受注CSV読み込み

[受注CSV読み込み]をダブルクリックし、 アクティビティを展開してください。

STEP1

[ファイルのパス]入力ボックスの右側にあるボタンをクリックして、ファイル 選択ダイアログを表示し、 「CusSalesData.csv」を選択する(プロパティ[ファイルのパス]に直接入力してもよい。この場合「”(ダブルクォーテーション)」でパスを囲むことを忘れずに)。

STEP2

プロパティ[ データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「CusSalesData」と入力し、 [Enter]キーを押す。DataTable型変数[CusSalesData]が設定される。

図5:[受注CSV読み込み]の設定

担当者マスタ読み込み

[Main]フローチャートに戻り、 [担当者マスタ読み込み]をダブルクリックし展開してください。

STEP1

[ブックのパス]入力ボックスの右側にあるボタンをクリックして、 ファイル選択ダイアログを表示し、 「staffmaster.xlsx」を選択する(プロパティ[ブックのパス]に直接入力してもよい)。

STEP2

[実行]の表示名を「担当者マスタデータ加工」に変更する。

STEP3

[担当者マスタデータ加工]に以下の3つのアクティビティを配置する。
[範囲を読み込み(Read Range)]アクティビティを追加し、 表示名を「 担当一覧をDataTableに格納」に変更する。

[データ列を追加(Add Data Column)]アクティビティを追加し、表示名を「MasterCustomerCD追加」に変更する。

[繰り返し( 各行)(For Each Row)]アクティビティを追加し、 表示名を「顧客コード転記ループ」に変更する。

STEP4

[担当者一覧をDataTableに格納]を選択する(図6❶) 。

プロパティ[シート名]に「”担当一覧”」を設定する。

プロパティ[ データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「StaffMasterData」と入力し、 [Enter]キーを押す。

[変数]パネルを開き、DataTable型変数 [StaffMasterData]のスコープを[Main]に変更する。

STEP5

[MasterCustomerCD追加]を選択する(図6❷) 。

プロパティ[データテーブル]にDataTable型変数[StaffMasterData]を設定する。

プロパティ[ 列名]に「”MasterCustomerCD”」と入力する。 これにより、DataTable型変数[StaffMasterData]に1列追加される。

STEP6

[顧客コード転記ループ]を選択する(図6❸) 。

プロパティ[データテーブル]にDataTable型変数 [StaffMasterData]を設定する。

[Body]に[代入(Assign)]アクティビティを追加する。

[代入]のプロパティ[左辺値(To)]に「row.Item(“MasterCustomerCD”)」と入力する。

[代入]のプロパティ[右辺値(Value)]に「row.Item(“顧客CD”).ToString」と入力する。

図6:[担当者マスタ読み込み]の設定

【MEMO】[担当者マスタ読み込み]では何をしている?

受注CSV(CusSalesData.csv)は、CSV形式のファイルです。DataTableに読み込む際、 受注CSV のすべての列のDataColumnクラスのDataTypeプロパティはString型となります。

一方、 担当者マスタ(staffmaster.xlsx)はExcelファイルです。Excelファイルを読み込み、DataTableを生成する際は、 すべての列のDataColumnクラスのDataTypeプロパティがObject型になります。

後ほど、2つのDataTableを突合させたいのですが、 [CustomerCD]と[ 顧客コード] のDataTypeプロパティの型がそれぞれ、String型とObject型であるため型が一致しません

そのため、DataTable型変数[StaffMasterData]の[顧客コード]を取得し、DataTypeプロパティをString型に変換したのち、新しい列[MasterCustomerCD]に挿入しています。

これにより、DataTable型変数[SalesFileData]の[CustomerCD]とDataTable型変数 [StaffMasterData]の[MasterCustomerCD]のDataTypeプロパティが同じString型になるため、結合ルールに使えるようになります(図7

図7:[CusSalesData]と[StaffMasterData]が結合できるようになる

テーブルの結合

メインのフローチャートに戻り、[テーブルの結合]の「ダブルクリックして表示」をダブルクリックし展開してください。 以下の2つのアクティビティを追加してください。

STEP1

[データテーブルを結合]アクティビティ

[データテーブルをフィルタリング(Filter Data Table)]アクティビティ

STEP2

[データテーブルを結合]の[結合ウィザード]をクリックし、[結合ウィザード]画面を起動する(図8)。

[入力データテーブル1]にDataTable型変数[CusSalesData]、[入力データテーブル2]にDataTable型変数[StaffMasterData]を設定する。

[出力データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「SalesDetailData」と入力し、[Enter]キーを押す。

結合型は[Inner]を選択する。

[列テーブル1]には「”CustomerCD”」と入力する。

[操作]は「=(イコール)」を選択する。

[列テーブル2]には「”MasterCustomerCD”」と入力する。

入力が完了したら[OK]をクリックする。

図8:[結合ウィザード]画面の設定

[結合ウィザード]画面が閉じます。変数のスコープを変更してください。

[変数]パネルを開き、 変数[SalesDetailData]のスコープを[Main]に変更する。

HINT 結合型

結合型には次の3つがあります。

1. Inner:結合ルールに一致する[入力データテーブル1]と[入力データテーブル2]のすべての行が保持されます。ルールに一致しない行はすべて、[出力データテーブル]から削除されます。

2. Left:[入力データテーブル1]のすべての行と結合ルールに一致する[入力データテーブル2]の値のみが保持されます。一致しない場合null値が挿入されます。

3. Full:結合条件の一致/不一致にかかわらず、 [入力データテーブル1]と[ 入力データテーブル2]のすべての行が保持されます。 両方のデータテーブルの条件に一致しない行には、null値が挿入されます。

STEP3

[データテーブルをフィルタリング]の[ フィルターウィザード]をクリックし、[フィルターウィザード]画面を起動する。

[入力データテーブル]と[ 出力データテーブル]にはDataTable型変数[SalesDetailData]を設定する。

[出力列]タブをクリックし、図9のように入力する。

入力が完了したら[OK]をクリックする。

図9:[フィルターウィザード]画面の設定

[テーブルの結合]が完成しました(図10)。

図10:[テーブルの結合]が完成

Excelに書き込み

[Main]フローチャートに戻り、 [Excelに書き込み]をダブルクリックし展開してください。

STEP1

プロパティ[ワークブックのパス]に「“SalesDetailData.xlsx”」と入力する。

[実行]の表示名を「Excelに書き込みを実行」に変更する。

STEP2

[Excelに書き込みを実行]に、[範囲に書き込み(Write Range)]アクティビティ([アクティビティ]パネルの [使用可能]→[アプリの連携→[Excel])を追加する。

プロパティ[ データテーブル]にDataTable型変数[SalesDetailData]を設定する。

プロパティ[ヘッダーの追加]にチェックする。

[Excelに書き込み]が完成しました(図11)。

図11:[Excelに書き込み]が完成

お疲れ様でした! これでワークフローの作成が完了しました。

使用する変数

ワークフロー内で使用する変数は表1の通りです。

表1:使用する変数

名前 変数の型 スコープ 既定値
CusSalesData DataTable Main
StaffMasterData DataTable Main
SalesDetailData DataTable Main

実行してみよう

それでは、ワークフローを実行してください。数秒でワークフローは終了します。

ワークフローの実行に成功すると、 プロジェクトフォルダーに「SalesDetailData.xlsx」が生成されます。

「SalesDetailData.xlsx」を開いて内容を確認してください。図2で示したようになっていますか?

運用のポイント

1. マスタファイルは共有フォルダーに格納する 

担当者マスタ「staffmaster.xlsx」は、当プロジェクトフォルダーの直下に配置されていますが、実際の運用時には運用者が加工・修正できるフォルダーに配置しましょう。部署内で共有する場合は部内の共有フォルダーに配置することになるでしょう。

 その場合、「担当者マスタ読み込み」のSTEP1のプロパティ[ブックのパス]を修正してください。

2. 担当者マスタはメンテナンスされている前提 

 「テーブルの結合」で解説しているように、担当者マスタと受注CSVの結合条件は「Inner join」です。

受注CSVの列[CustomerCD]のすべてが、担当者マスタの[顧客CD]になかった場合、その行は出力されません。

もし、担当者マスタのメンテナンス漏れも検知したい場合は、結合条件を「Left Join」にし、合致せずにNull値が挿入されている行を探す、というロジックを入れなければなりません。

 このように、実際の業務に使うロジックは長くなりがちです。現実的な対応方法として、担当者マスタが正しくメンテナンスされていることを確認するためだけのワークフローを作成することをお勧めします。

運用時には、まず確認用ワークフローを実行し、確認ができた後に、本記事のワークフローを実行します。

さらにUiPathに詳しくなるには

この記事は『UiPath業務自動化最強レシピ RPAツールによる自動化&効率化ノウハウ』の中から抜粋して、Web向けに編集しています。

まとめてUiPathの知識を身に付けたい方は、ぜひ書籍をお読みください。

この書籍を参考にしてワークフローを作成する場合は、以下の記事を読んでUiPath Studioをクラシック デザイン エクスペリエンスに変更してください。