【UiPath】ウーバーイーツ売上データ転記作業の自動化を試みる【初心者】

UiPath

UiPath】ウーバーイーツ売上データ転記作業の自動化を試みる【初心者】

今回は、UiPathで「転記作業の自動化」に挑戦した結果を書きます。

目的

ウーバーイーツ配達のデータ記入を自動化する。

使用したもの

・UiPath 21.4.0.0

・Googleスプレッドシート

・Excel

・Uber管理画面

概要

一度のウーバーイーツ活動の配達件数や所要時間のデータをUiPathに記入し、そのデータをもとに合計売上や時給を自動で記録・表示する。

 

全体のワークフローは以下画像。

大きく4つの段階に分けて作成してみた。

1.ユーザー入力
2.売上計算
3.書き込み・表示
4.使用済みファイルの削除

上記4つの詳細を書く。

1.ユーザー入力

ユーザー入力シーケンスの全体像は以下画像。

このフローは、ユーザーがウバ活情報を記入する部分。

ここで入力した値は、他のシーケンスでも使用するため、スコープを一番高い階層のフローチャートにしている。

最後の代入アクティビティでは、配達件数とチップ件数とクエスト・プロモーション件数を合わせたものを変数に格納している。この部分が一度の配達データのみを抜粋するときのポイントとなる。

まとめ

入力ダイアログで配達データをユーザーから取得して変数に格納している。

2.売上計算

売上計算シーケンスの全体像は以下画像。

このフローは、チップありとなしの場合の合計売上を計算する部分。

大まかな流れとしては、

Uber管理画面から配達データが記載されてあるCSVファイルをダウンロード

ダウンロードしたCSVファイルをExcel上で操作

必要なデータを取得、変数格納。

 

ここで問題があったのは、2番目の「ダウンロードしたCSVファイルをExcel上で操作」だ。

ここのフローでやりたいことは、必要なデータを取得して、計算することだ。しかし、UiPath上で売上計算を試みたところ、なかなかうまくいかなかった。そのため、UiPath上で計算することをやめて、Excel上で計算することにした。

以下から詳細を述べる。

a
まず、計算を行う簡単なマクロを作成し、そのマクロがあるExcelファイルを開く。

Excelアプリケーションスコープ内は、そのExcelファイルが開かれた状態でアクティビティが実行される。Excelアプリケーションスコープ外に実行ポイントが移動したら、その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.ToInt32 メソッド (System)
指定した値を 32 ビット符号付き整数に変換します。
学習者
学習者

型が原因のエラーは、ほんとによく出会う。”Convert”での型変換は覚えておいて損はない!

c
上記で計算した売上合計には、チップやクエストなどの+αの部分も含まれている。この+α分を抜きにして、配達のみの売上合計を出す。

+α分を取得するために、配達データの行の中からチップ・プロモーションと記入されている行のみを取得する。その方法は以下画像。

配達データはデータテーブル型なので、Select文を使い、+α分を取得して変数に格納。

チップ・プロモーションのみになったデータテーブルを先ほどと同じようにExcel上で値の合計を出す。それから、値を変数に格納し、型変換を行う。

a
チップとプロモーションのデータを扱うExcelファイルを新規で作成。

b
前回と同じように、マクロを実行させて、合計を出す。

c
前回と同じようにConvertを使って、型をInt型に変換。最後に、すべての売上合計からチップ・プロモーション分の売上を引く。

学習者
学習者

これで、チップ・プロモーションを含む売上合計と含まない売上合計を格納した変数ができたね。後は、これをスプレッドシートに記入、メッセージボックスで表示できれば、、

 

まとめ

・今回分のデータのみを残す方法は、「全体-2つ目以降のデータ」
・合計を出す処理はExcelマクロで実現
・今回分のチップ・プロモーションを含む売上合計と含まない売上合計を取得

3.書き込み・表示

書き込み・表示シーケンスの全体像は以下画像。

学習者
学習者

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

※スプレッドシートに書き込む方法は以下記事。

【UiPath】スプレッドシートのセルを取得してみる【初心者】
【UiPath】スプレッドシートのセルを取得してみる【初心者】 目的 UiPathでGoogleスプレッドシートのセルを取得できるかやってみる。 仮説① この記事通りにしたら、できるのでは? 検証① ・途中まで記事通...

 

a
まずは、UiPathで記入する用のシートを作成し、そのシートを読み込む。

シートの内容は、以下。

日付配達件数チップ件数プロモーション・クエスト件数開始時刻終了時刻売上(チップなし)売上(チップあり)

 

b
変数に格納した値を上記シートに記入するために、配列の型の変数にこれまでに作成した変数を格納する。

格納する値の型を統一する必要があるため、Int型の変数はString型(.ToString)に変換している。
c
上記で作成した変数を[データ行を追加]アクティビティで、「a」で読み込んだデータテーブル型の変数に追加。

学習者
学習者

後は、シートに書き込むだけだね。これで、データ自動記入はできたんだけど、どうせなら、時給表示もできないかな。

 

時給表示を試みる。

上記までを行うことで、スプレッドシート上では時給が表示される。それを取得して、表示できれば良い。

a
時給が表示されるシートを指定して、そのシートのすべてのデータを取得する。

b
必要なデータは、新しく追加された行のみ。そのため、前回と同様に、必要のないデータを削除する必要がある。その手始めにすべての行数を取得する。

※「⁺1」はヘッダー分

Excel上で必要のないデータを削除する。
a
すべてのデータをExcelに書き込み後、必要のないデータを[範囲を削除]アクティビティで削除する。範囲指定は以下。
"A2:Q"+(completed_sales_data_rows-1).ToString

(completed_sales_data_rows-1)は、すべてのデータ行数から「1」引いたもの。

すべてのデータ行数が10なら、

A2:Q9までが削除され、ヘッダーと一番最後の行のみ残る。

[範囲を削除]アクティビティのプロパティ欄に「セルのシフト」というチェック欄がある。これにチェックをつけないと最終行のデータが一番上にシフトされない。
b
チップ・プロモーションを含む場合の時給と含まない場合の時給が記入されているセルを取得する。
最後に、メッセージボックスで表示。

4.使用済みファイルの削除

使用済みファイルの削除シーケンスの全体像は以下画像。

[削除]アクティビティを使用して、今回使用したファイルをすべて削除する。

次回の課題

ウバ活中は、中断して買い物することもある。中断後、すぐに記録を取りたいが、このワークフローは自宅のパソコンでしか正しく実行できない。そのため、帰宅後に中断前と後のデータを分けて記入する手間が生じてしまう。

ウバ活中断後、スマホですぐにこのワークフローを実行できたら、なお良い。

学習者
学習者

UiPath Appsを使ってみよう!

参考文献

マクロを実行する | Uipath道場
マクロを実行する - uipath technical infomation for everyone
マクロを実行する | Uipath道場
マクロを実行する - uipath technical infomation for everyone
【エクセル初心者向き】LEFT関数の使い方と注意点
あるセルに入力されているデータの左から○文字だけを抽出して、別のセルに表示するためにはLEFT関数を使います。 ただし、データが文字列以外の場合には、LEFT関数を使うと、意図しな...

Convert.ToInt32 メソッド (System)
指定した値を 32 ビット符号付き整数に変換します。

 

 

コメント

タイトルとURLをコピーしました