5.1.1 毎日のExcel作業を自動化しよう
毎日、 データの入ったファイルとマスタの入ったファイルをExcel上で開いて、VLOOKUP関数を使って結合させて、1つのファイルにする作業を行っていませんか? 慣れてしまえば簡単な作業なのですが、 自動化できたら楽になりますよね。企業としても、毎日何人もが行っているこの作業が自動化できることは生産性向上に大きな効果が見込めます。本セクションではこの作業を自動化するテクニックを解説します。
5.1.2 業務イメージ
ここで紹介する例(図5.1)は商品を卸しているBtoBの企業です。顧客企業が商品受注システムを使って発注します❶。
本セクションの対象企業では、商品受注システムからデータをCSV形式でダウンロードし❷、顧客ごとの営業担当者が記載された担当者マスタ(Excelファイル)と結合させて、売上明細Excelを作成しています❸。
❶~❸を具体的なイメージで表したのが、図5.2です。
セクションでは商品受注システムからダウンロード済みの受注CSVファイルと担当者マスタを結合させて、売上明細Excelを作成するワークフローを作成します。
同じような業務を行っている読者は、参考にして自分の業務に応用してください。
5.1.3 完成図
ワークフローは4つのパートで構成されます。 [受注CSV読み込み]で受注CSVファイルを読み込み、 [担当者マスタ読み込み]で担当者マスタを読み込みます。[テーブルの結合]で2つのファイルを結合させて、 [Excelに書き込み]で売上明細をExcelファイルに書き込みます(図5.3)。
5.1.4 作成準備
STEP1UiPath Studioを起動し、新たにプロジェクトを作成する。
STEP2作成したプロジェクトフォルダーの中に、本書のサンプルフォルダー「サンプルファイル」→「Chapter5」→「5.1」に格納されている「CusSales Data.csv」と「staffmaster.xlsx」をコピーする。
“CusSales Data.csv” をダウンロード CusSalesData.csv – 134 回のダウンロード – 36 KB
“staffmaster.xlsx” をダウンロード staffmaster.xlsx – 116 回のダウンロード – 13 KB
5.1.5 作成手順
1全体の枠を作る
STEP1Main.xamlを開く。
❶[フローチャート(Flowchart)]アクティビティを追加する。
❷表示名を「Main」に変更する。
STEP2[Main]フローチャートをダブルクリックして展開し、[Main]フローチャート上に以下の4つのアクティビティを追加し、順番に流れ線で結ぶ。
❶[CSVを読み込み(Read CSV)]アクティビティを追加し、 表示名を「 受注CSV読み込み」にする。
❷[Excel アプリケーションスコープ(Excel Application Scope)]アクティビティを追加し、表示名を「担当者マスタ読み込み」にする。
❸[シーケンス(Sequence)]アクティビティを追加し、表示名を「 テーブルの結合」にする。
❹[Excel アプリケーションスコープ(Excel Application Scope)]アクティビティを追加し、表示名を「Excelに書き込み」にする(図5.4)。
2受注CSV読み込み
STEP1[受注CSV読み込み]をダブルクリックし、 アクティビティを展開する。[ファイルのパス]入力ボックスの右側にあるボタンをクリックして、ファイル 選択ダイアログを表示し、 「CusSalesData.csv」を選択する(プロパティ[ファイルのパス]に直接入力してもよい。この場合「”(ダブルクォーテーション)」でパスを囲むことを忘れずに)。
STEP2プロパティ[ データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「CusSalesData」と入力し、 [Enter]キーを押す。DataTable型変数[CusSalesData]が設定される。
3担当者マスタ読み込み
STEP1[Main]フローチャートに戻り、 [担当者マスタ読み込み]をダブルクリックし展開する。[ブックのパス]入力ボックスの右側にあるボタンをクリックして、 ファイル選択ダイアログを表示し、 「staffmaster.xlsx」を選択する(プロパティ[ブックのパス]に直接入力してもよい)。
STEP2[実行]の表示名を「担当者マスタデータ加工」に変更する。
STEP3[担当者マスタデータ加工]に以下の3つのアクティビティを配置する。
❶[範囲を読み込み(Read Range)]アクティビティを追加し、 表示名を「 担当一覧をDataTableに格納」に変更する。
❷[データ列を追加(Add Data Column)]アクティビティを追加し、表示名を「MasterCustomerCD追加」に変更する。
❸[繰り返し( 各行)(For Each Row)]アクティビティを追加し、 表示名を「顧客コード転記ループ」に変更する。
STEP4[担当者一覧をDataTableに格納]を選択する(図5.6❶) 。
❶プロパティ[シート名]に「”担当一覧”」を設定する。
❷プロパティ[ データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「StaffMasterData」と入力し、 [Enter]キーを押す。
❸[変数]パネルを開き、DataTable型変数 [StaffMasterData]のスコープを[Main]に変更する。
受注CSVは、CSV形式のファイルです。DataTableに読み込む際、 受注CSV のすべての列のDataColumnクラスのDataTypeプロパティはString型となります。一方、 担当者マスタは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型になるため、結合ルールに使えるようになります(図5.5)
[MasterCustomerCD追加]を選択する(図5.6❷)。
❶プロパティ[データテーブル]にDataTable型変数[StaffMasterData]を設定する。
❷プロパティ[ 列名]に「”MasterCustomerCD”」と入力する。 これにより、DataTable型変数[StaffMasterData]に1列追加される。
STEP6[顧客コード転記ループ]を選択する(図5.6❸)
❶プロパティ[データテーブル]にDataTable型変数 [StaffMasterData]を設定する。
❷[Body]に[代入(Assign)]アクティビティを追加する。
❸[代入]のプロパティ[左辺値(To)]に「row.Item(“MasterCustomerCD”)」と入力する。
❹[代入]のプロパティ[右辺値(Value)]に「row.Item(“顧客CD”).ToString」と入力する。
4テーブルの結合
STEP1メインのフローチャートに戻り、[テーブルの結合]の「ダブルクリックして表示」をダブルクリックし展開する。 以下の2つのアクティビティを追加する。
❶[データテーブルを結合]アクティビティ
❷[データテーブルをフィルタリング(Filter Data Table)]アクティビティ
STEP2[データテーブルを結合]の[結合ウィザード]をクリックし、[結合ウィザード]画面を起動する(図5.7)
❶[入力データテーブル1]にDataTable型変数[CusSalesData]、[入力データテーブル2]にDataTable型変数[StaffMasterData]を設定する。
❷[出力データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「SalesDetailData」と入力し、[Enter]キーを押す。
❸結合型は[Inner]を選択する。
❹[列テーブル1]には「”CustomerCD”」と入力する。
❺[操作]は「=(イコール)」を選択する。
❻[列テーブル2]には「”MasterCustomerCD”」と入力する。
❼入力が完了したら[OK]をクリックする。
❽[変数]パネルを開き、 変数[SalesDetailData]のスコープを[Main]に変更する。
結合型には次の3つがあります。
1. Inner:結合ルールに一致する[入力データテーブル1]と[入力データテーブル2]のすべての行が保持されます。ルールに一致しない行はすべて、[出力データテーブル]から削除されます。
2. Left:[入力データテーブル1]のすべての行と結合ルールに一致する[入力データテーブル2]の値のみが保持されます。一致しない場合null値が挿入されます。
3. Full:結合条件の一致/不一致にかかわらず、 [入力データテーブル1]と[ 入力データテーブル2]のすべての行が保持されます。 両方のデータテーブルの条件に一致しない行には、null値が挿入されます。
[データテーブルをフィルタリング]の[ フィルターウィザード]をクリックし、[フィルターウィザード]画面を起動する。
❶[入力データテーブル]と[ 出力データテーブル]にはDataTable型変数[SalesDetailData]を設定する。
❷[出力列]タブをクリックし、図5.8のように入力する。
❸入力が完了したら[OK]をクリックする。
5Excelに書き込み
STEP1[Main]フローチャートに戻り、 [Excelに書き込み]をダブルクリックし展開する。
❶プロパティ[ワークブックのパス]に「”SalesDetailData.xlsx”」と入力する。
❷[実行]の表示名を「Excelに書き込みを実行」に変更する。
STEP2[Excelに書き込みを実行]に、[範囲に書き込み(Write Range)]アクティビティ([アクティビティ]パネルの [使用可能]→[アプリの連携→[Excel])を追加する。
❶プロパティ[ データテーブル]にDataTable型変数[SalesDetailData]を設定する。
❷プロパティ[ヘッダーの追加]にチェックする。
5.1.6 実行する
ワークフローの実行に成功すると、 プロジェクトフォルダーに「SalesDetailData.xlsx」が生成されます。
5.1.7 使用する変数
ワークフロー内で使用する変数は表5.1の通りです。
表5.1:使用する変数
名前 | 変数の型 | スコープ | 既定値 |
CusSalesData | DataTable | Main | ー |
StaffMasterData | DataTable | Main | ー |
SalesDetailData | DataTable | Main | ー |
5.1.8 運用のポイント
1 マスタファイルは共有フォルダーに格納する担当者マスタ「staffmaster.xlsx」は、当プロジェクトフォルダーの直下に配置されていますが、実際の運用時には運用者が加工・修正できるフォルダーに配置しましょう。部署内で共有する場合は部内の共有フォルダーに配置することになるでしょう。
その場合、「5.1.5 作成手順/3担当者マスタ読み込み」のSTEP1のプロパティ[ブックのパス]を修正してください。
2 担当者マスタはメンテナンスされている前提「5.1.5 作成手順/4テーブルの結合」で解説しているように、担当者マスタと受注CSVの結合条件は「Inner j oin」です。受注CSVの列[CustomerCD]のすべてが、担当者マスタの[顧客CD]になかった場合、その行は出力されません。もし、担当者マスタのメンテナンス漏れも検知したい場合は、結合条件を「Left Join」にし、合致せずにNull値が挿入されている行を探す、というロジックを入れなければなりません。
このように、実際の業務に使うロジックは長くなりがちです。現実的な対応方法として、担当者マスタが正しくメンテナンスされていることを確認するためだけのワークフローを作成することをお勧めします。
運用時には、まず確認用ワークフローを実行し、確認ができた後に、本セクションのワークフローを実行します。
5.1.9 関連セクション
売上明細Excelが作成できましたが、 ここで業務は終わりません。 売上明細Excelをさらに集計して担当者別の売上実績を作成する、といった業務もあります。この方法については、以下のセクションを参考にしてください。
⇒ 5.4 引数付きのExcelマクロを実行する
また、本セクションでは受注データダウンロードは対象としていませんが、この業務プロセスも自動化できます。
⇒ 4.1 ブラウザー操作を簡単に自動化する
⇒ 4.5 ボタンをクリックしてデータをダウンロードする
⇒ 11.1WebシステムからのCSVダウンロードプロセス
データテーブル(DataTable)について、以下のセクションで詳しく解説しています。
⇒ 3.3 ファイル操作を極める
当記事は『UiPath業務自動化最強レシピ RPAツールによる自動化&効率化ノウハウ』の中から抜粋しています。
- 投稿タグ
- UiPath
Pingback: UiPath業務自動化最強レシピの目次 | 完全自動化研究所