店舗ごとにデータダウンロードしなきゃいけない!?
どうも、アラ還サラリーマンです。
とある地方の某小売業の会社で、店舗運営全般を統括する部署の管理部門の担当をしています。
管理部門では、店舗事務方のサポートやデータ管理などなど、多岐にわたる業務を担当しています。
ある日、パート社員のDさんから「困りごと」を相談されました。
Dさんはエクセルやパワーポイントを使って資料をまとめることに長けており、部署内でも頼られる存在です。
しかもDさんの机の上には、デスクトップパソコンが2台鎮座しています。
そんなDさんからの「困りごと」は、「店舗の数だけあるCSVファイルを1つに簡単にまとめられないか」というものでした。
話を聞く限りでは、Excelの「VBA」で実装できそうです。
しかしそもそも、どうして「店舗の数だけ」CSVファイルが存在するのでしょうか?
そのあたりをDさんに詳しく聞いてみると、Dさんが資料作成のために使用しているシステムの仕様がそうなっているとのことでした。
そのシステムを使用すると、店舗のレジごとのデータ(売上や客数等)を検索・データ保存できます。
でも1店舗ずつしかデータを抜けないとは不便だなぁ・・・。
Dさんは店舗ごとにデータをCSV形式でダウンロードして、ファイル名も店舗名にして保存していました。
Dさんは、「ファイル名はコピペしているから時間はそんなにかかりませんよ」と言っていました。
いやいや、でもこれをやっている間は、何もできませんよ、Dさん!
こっちの方をなんとかせねば!
ということで、店舗ごとにデータダウンロードする方法について考えました。
今回使用したツール
Power Automate Desktop
上記のページから引用すると、
Microsoft Automate Desktopは、ワーク フローを自動化するツールである Microsoft Power Automate の一機能です。デスクトップ操作を自動化するための機能を持ち、Windows 10 および Windows 11 ユーザーであれば、無償で利用することができます。
Microsoft Excel や Microsoft Word で利用できるマクロや VBA と似ていますが、Microsoft Office アプリに依存せず、マウスをクリックするというような操作も含めて簡単に自動化できることが特長です。
夜間やタイマーでの自動実行ではなく、ユーザーが実行ボタンを押す場合は無料で活用できます。使い方も簡単で、画面に表示されたアイコンをパズルのように組み合わせるだけで自動化したい操作を組み立てることが可能です。
とのこと。
自分自身も最近、 Power Automate Desktop を少し勉強したので、今回はこれを使用したいと思います。
実際にできた動画がこちら!
- 社内用のアプリケーションを使用しているので、ほとんどモザイクがかかっています(笑)
- フローには、社内システムにログイン後、いろいろ設定していますが、長くなるので動画ではカットしました。
操作方法
-
レジデータ フォルダの中に マスタ.csv を入れておきます。
-
マスタ.csv は、1列目は6桁の店舗コード、2列目は店舗名、3列目は保存時のファイル名を入力しています。(下のサンプルでは3店舗しかありませんが、実際は数十倍以上あります)
-
Power Automate Desktop の レジデータ取得 フローを実行します。
-
出現するインプットボックスに何週目か入力します。この数字で レジデータ フォルダの中に 入力した数字w というフォルダを作成します。
-
あとは、入力した数字w フォルダ内に、上記で指定した期間のレジデータが、店舗ごとにcsvファイルで次々にダウンロードされます。
-
何らかの原因でダウンロードされなかった場合、失敗した店舗コード・店舗名を、最後にメッセージボックスで表示します。
Power Automate Desktop のフロー説明
社内システムを使用しているため、一部隠している箇所もありますがご了承ください。
フロー3~4行目
- メッセージボックス内に、改行を含めたコメント(このフローでは未処理の店舗)を表示したかったのですが、改行コードをみつけられず・・・。
ネット検索していたら下記の記事を発見し、参考にさせていただきました!
- 改行を変数 newLine に格納して使用します。
フロー10~13行目
- 開始年月日と終了年月日の日付をそれぞれ yyyyMMdd 形式のテキストに変換します。
フロー14~25行目
- 社内システムにログイン後、いろいろ設定しています。細かいことは割愛します。
フロー26~60行目
-
マスタ.csv の行数分ループ処理します。
- 保存先の CurrentItem に、マスタ.csv の1行分が読み込まれます。
店舗コード、店舗名はそれぞれ、 CurrentItem[0] 、CurrentItem[1] のように指定します。
フロー29~41行目
- 店舗コード 入力後、実際に反映した文字列(店舗コード+店舗名)とを比較し、店舗コードが一致していれば次に進みます。一致していなければ同じ処理を3回まで繰り返し、一致しなければ、不一致店舗を skipLog に記録し、次の店舗に処理を移します。
フロー43、45行目
- テキストに変換した開始年月日と終了年月日をそれぞれ入力します。
フロー49~54行目
- データ検索後、必要なUI要素が出現するまで待機します。
フロー55~59行目
フロー61~64行目
- 社内システムからログアウトします。
フロー65~70行目
Dさんに実際に使用してもらいました!
さっそくDさんの片方のデスクトップに Power Automate Desktop を設定し、フローを共有しました。
そしていよいよ レジデータ取得 フローを実行!
しばらくパソコン画面を見つめながら、かたまっていたDさん。
反応がうすいなぁと思っていたところ、「なんでこれ動くの?」「ほっといても大丈夫?」「すごい・・・」と、とても驚いた様子でした。
「これで片方のデスクトップで別の仕事ができますね。ありがとうございます!」とDさんには満足していただけたようです。
まだまだ改善の余地あり!
このフローでは、何回か実行しているとどういうわけかUI要素をうまくとらえられなくなり、途中で止まることがよく発生しました。なので キーの送信 アクションを多用しています。
実は フロー29~41行目 や フロー49~54行目 は、最初につくったフローにはありませんでした。
実際にDさんに試してもらったときは、最初につくったフローでもうまくいきました。
しかし自分のパソコンで実行したときに、ファイル名の店舗のレジデータと、ファイルの中身のレジデータが全然違っていたケースが3件発生しました。(ファイルの中身には店舗名を識別するデータがない!)
これを防ぐために上記を追加しました。
ひょっとすると、Dさんと私のこの社内用のアプリケーションの設定がどこか違うのかもしれません。(権限の問題か?)
まだまだエラーが発生しそうなところもありますが、都度、解決していきたいと思います。
一応使ってもらえるところまでたどり着きました! やったー!!
ではでは、今日はこのへんで!
尚、フローのソースコード(Robin) については、社内用のアプリケーションを使用していることもあり、今回は割愛しました。