【UiPath】ウーバーイーツ売上データ転記作業の自動化を試みる【初心者】
今回は、UiPathで「転記作業の自動化」に挑戦した結果を書きます。
目的
ウーバーイーツ配達のデータ記入を自動化する。
使用したもの
・UiPath 21.4.0.0
・Googleスプレッドシート
・Excel
・Uber管理画面
概要
一度のウーバーイーツ活動の配達件数や所要時間のデータをUiPathに記入し、そのデータをもとに合計売上や時給を自動で記録・表示する。
全体のワークフローは以下画像。
大きく4つの段階に分けて作成してみた。
2.売上計算
3.書き込み・表示
4.使用済みファイルの削除
上記4つの詳細を書く。
1.ユーザー入力
ユーザー入力シーケンスの全体像は以下画像。
このフローは、ユーザーがウバ活情報を記入する部分。
ここで入力した値は、他のシーケンスでも使用するため、スコープを一番高い階層のフローチャートにしている。
最後の代入アクティビティでは、配達件数とチップ件数とクエスト・プロモーション件数を合わせたものを変数に格納している。この部分が一度の配達データのみを抜粋するときのポイントとなる。
まとめ
2.売上計算
売上計算シーケンスの全体像は以下画像。
このフローは、チップありとなしの場合の合計売上を計算する部分。
大まかな流れとしては、
Uber管理画面から配達データが記載されてあるCSVファイルをダウンロード
↓
ダウンロードしたCSVファイルをExcel上で操作
↓
必要なデータを取得、変数格納。
ここで問題があったのは、2番目の「ダウンロードしたCSVファイルをExcel上で操作」だ。
ここのフローでやりたいことは、必要なデータを取得して、計算することだ。しかし、UiPath上で売上計算を試みたところ、なかなかうまくいかなかった。そのため、UiPath上で計算することをやめて、Excel上で計算することにした。
以下から詳細を述べる。
a
まず、計算を行う簡単なマクロを作成し、そのマクロがあるExcelファイルを開く。
b
Excelアプリケーションスコープで売上計算を行うExcelファイルを新規で作成する。
[範囲に書き込み]アクティビティで売上データのCSVファイルをExcelファイルに書き込む。

これで、Excelファイルにすべての売上データが記入されているわけだね。でも、必要なのは一部分。どうやって、必要なデータのみを抜き出す?
c
必要なデータのみを抜き出すため、[範囲を削除]アクティビティで必要のないデータをすべて削除する。

必要のないデータをどう表す?
必要なのは、直近の配達データなので、それより前の配達データを削除する。
つまり、
直近の配達データ(A)=すべての売上データ(B)-2つ目以降の売上データ(C)
このC部分を表現できれば良い。で、表現方法は以下。
C=すべての行数-今回の配達データ分の行数
すべての行数は、既にExcelファイルに書き込まれているため、問題ない。しかし、今回の配達データ分の行数は分からない。いや、実はこれも既に記入済みだ。
ユーザー入力シーケンスで、配達件数・チップ件数・クエスト件数を取得しているため、これらを合わせた数値が「今回の配達データ分の行数」となる。
よって、[範囲を削除]アクティビティのプロパティ欄”範囲”は以下のようになる。
"A2:I"+(Rows-total_of_count_and_chip).ToString 変数 Rows:すべての行数 変数 total_of_count_and_chip:今回の配達データ分の行数
もし、すべての行数が10で、今回の配達データ分の行数が2であれば、
「A2:I8」となり、その範囲が削除され、配達データ分の行のみ残ることとなる。※A1はヘッダー
よって、配達データ分の行(直近の配達データ)のみ残り、後は、この分の売上の合計を計算すれば良い。

ふむふむ、全体から必要のない部分を削除することで必要な部分のみを残したってことだね。こういったデータの取得方法は、色々な場面に応用できそう。
売上合計取得から下のワークフローの説明
a
売上の合計を出す方法は、マクロを実行させて、計算。そのため、[マクロを実行]アクティビティを使用する。
実行するマクロは以下。「マクロの記録」で作ったもの(無編集)。
Sub Uber_once_Total() ' ' Uber_once_Total Macro ' ' Range("E2:E20").Select Range("E20").Activate ActiveCell.FormulaR1C1 = "=SUM(R[-18]C:R[-1]C)" Range("E2:E20").Select End Sub
簡単に解説すると、E列に配達1つ1つの売上が記載されていて、その列の合計をE20に表示する。
このマクロを実行することで、E20に今回の配達での合計売上が表示される。後は、このセルを取得すればいい。
b
E20のセルの値を変数に格納する。この時、格納する値はDouble型になるので、int型に変換する必要がある。今回は型変換を”Convert”で行った。


型が原因のエラーは、ほんとによく出会う。”Convert”での型変換は覚えておいて損はない!
c
上記で計算した売上合計には、チップやクエストなどの+αの部分も含まれている。この+α分を抜きにして、配達のみの売上合計を出す。
+α分を取得するために、配達データの行の中からチップ・プロモーションと記入されている行のみを取得する。その方法は以下画像。
配達データはデータテーブル型なので、Select文を使い、+α分を取得して変数に格納。
チップ・プロモーションのみになったデータテーブルを先ほどと同じようにExcel上で値の合計を出す。それから、値を変数に格納し、型変換を行う。
a
チップとプロモーションのデータを扱うExcelファイルを新規で作成。
b
前回と同じように、マクロを実行させて、合計を出す。
c
前回と同じようにConvertを使って、型をInt型に変換。最後に、すべての売上合計からチップ・プロモーション分の売上を引く。

これで、チップ・プロモーションを含む売上合計と含まない売上合計を格納した変数ができたね。後は、これをスプレッドシートに記入、メッセージボックスで表示できれば、、
まとめ
・合計を出す処理はExcelマクロで実現
・今回分のチップ・プロモーションを含む売上合計と含まない売上合計を取得
3.書き込み・表示
書き込み・表示シーケンスの全体像は以下画像。

スプレッドシートに書き込むのは、これまでスプレッドシートに手記入していたから。それ以外の理由はない。Excelでも良い。
※スプレッドシートに書き込む方法は以下記事。

a
まずは、UiPathで記入する用のシートを作成し、そのシートを読み込む。
シートの内容は、以下。
日付 | 配達件数 | チップ件数 | プロモーション・クエスト件数 | 開始時刻 | 終了時刻 | 売上(チップなし) | 売上(チップあり) |
b
変数に格納した値を上記シートに記入するために、配列の型の変数にこれまでに作成した変数を格納する。
上記で作成した変数を[データ行を追加]アクティビティで、「a」で読み込んだデータテーブル型の変数に追加。

後は、シートに書き込むだけだね。これで、データ自動記入はできたんだけど、どうせなら、時給表示もできないかな。
時給表示を試みる。
上記までを行うことで、スプレッドシート上では時給が表示される。それを取得して、表示できれば良い。

時給が表示されるシートを指定して、そのシートのすべてのデータを取得する。
b
必要なデータは、新しく追加された行のみ。そのため、前回と同様に、必要のないデータを削除する必要がある。その手始めにすべての行数を取得する。
※「⁺1」はヘッダー分

"A2:Q"+(completed_sales_data_rows-1).ToString
(completed_sales_data_rows-1)は、すべてのデータ行数から「1」引いたもの。
すべてのデータ行数が10なら、
A2:Q9までが削除され、ヘッダーと一番最後の行のみ残る。
チップ・プロモーションを含む場合の時給と含まない場合の時給が記入されているセルを取得する。

4.使用済みファイルの削除
使用済みファイルの削除シーケンスの全体像は以下画像。
[削除]アクティビティを使用して、今回使用したファイルをすべて削除する。
次回の課題
う~ん、簡単にはいかなそう。
オーケストレーターアプリから、プロセスの実行はできるけど、入力ダイアログがパソコンに表示されてしまうから、スマホでは今のところできなさそう。
入力やメッセージボックスがスマホに表示されるようにできたらいいな
— ひでと@UiPath勉強中/ウバ活中 (@Hide21Hk) March 31, 2021
ウバ活中は、中断して買い物することもある。中断後、すぐに記録を取りたいが、このワークフローは自宅のパソコンでしか正しく実行できない。そのため、帰宅後に中断前と後のデータを分けて記入する手間が生じてしまう。
ウバ活中断後、スマホですぐにこのワークフローを実行できたら、なお良い。

UiPath Appsを使ってみよう!
参考文献


コメント