見出し画像

RPAシナリオ作成でやった【プチ】工夫(Excel操作編)

この記事は「RPA(ロボティック・プロセス・オートメーション) Advent Calendar 2022」の 9日目 の記事です。

はじめに

RPAシナリオ作成者をしています。
現場で試行錯誤している中で「これはやってよかったかも」と思ったちっちゃな工夫を3つ挙げていきます。

とはいえストーリーが何もないのも分かりづらいので、シンプルなダミー業務を用意してみました。

ダミー業務:契約管理システムへのデータ転記作業

csvファイルに記載された契約情報を、契約管理システムに登録します。

※フローチャート作成:https://app.diagrams.net/

シナリオ作成におけるExcel操作の【プチ】工夫

使用ツールはWinActorですが、なるべくWinActorに依存しなさそうなものにしました。

1.工程ごとに結果を書きこむ列を用意する

シナリオ作成を依頼される業務では、複数の工程が組み合わさっていることが多いです。

  • 工程Aで○○という表示がされたら、工程Bは飛ばして工程Cをおこなう

  • 工程Aで■■、工程Bで▲▲となったら、工程Cはおこなわない

  • 工程Cで◎◎となった場合のみ、工程Dをおこなう

  • ……

さらに、操作対象となる自社システムの中には、時々不安定になってエラーが出るものの、システムを再起動してやり直すと普通にうまくいく、というものも少なくありません。
工程が単純ならリトライは比較的容易ですが、色々組み合わさっていると、どの処理からリトライすればいいのか分からなくなってしまうことも。

なので、どの工程までどの程度完了しているのか?ということを把握するために、工程ごとに結果列を設けるようにしました。

工程列のサンプル(データはダミー)

ダミー業務だと、データに対する処理工程として
 ①既存契約がなければ新規に登録する「契約登録」工程
 ②エリアが対象外ならおこなう「エリア変更」工程
の2つがあります。

データの最左端にこの2つの工程の結果を書きこむ列を設けておけば、何らかの要因で中断し、リトライすることになっても、どこまで進んでいるのかロボットだけでなく人の目からも把握しやすくなります。

2.対象行を「行のカウントアップ」や「指定列の最終行」ではなく「文字列検索」で探す

工程列を作ったら、状況に合わせて「処理中」「完了」「中断」と書き込むようにします(工程によってはさらに文言を増やしてもいい)。

流れとしては、よくこうしています。(対象行検索フロー)

  1. 工程列(V:W列)の範囲を対象に「処理中」のセルがないか検索

    1. 対象セルがある場合→5.へ

    2. 対象セルがない場合→2.へ

  2. 最初の工程(V列)の範囲を対象に「ブランク」セルを検索して行取得

  3. その行の、データがあるなら確実に値がある列から値を取得

    1. 値がある→4.へ

    2. 値がない→全データ処理完了とする(終了)

  4. 最初の工程(V列)のブランクセルに「処理中」と書き込む

  5. 「処理中」セルのある行を対象に処理を開始

WinActorなら「Excel操作(検索)」で指定の文言(ブランクも可)があるセルの列も行も求められるので、どの工程が「処理中」なのかもわかりますし、その工程からのリトライがしやすくなります。

そして、その処理中の工程で何らかの結果が得られたら、結果を書き込みます。(結果更新フロー)

  1. 契約登録列(V列)で、「処理中」のセルを検索して行取得

  2. そのセルに、契約登録工程における結果を書き込む

    1. 「完了」  →3.へ

    2. 「登録済み」→処理は終了、対象行検索フローへ

    3. 「中断」  →中断原因を備考列(X列)に書き込み、対象行検索フローへ

  3. 次の工程であるエリア変更列(W列)に「処理中」と書き込む

  4. エリア変更処理の工程へ

行カウントアップや最終行から取得する方がシンプルで分かりやすいですが、工程が多いものほど、多少込み合ったフローになりつつもこのように管理したほうが便利だなと感じました。

3.データ変換シートを用意しておく

処理対象となる行から、ただ値を取ってくるだけでいいのであれば、WinActorでいう「Excel操作(値の取得)」や「Excel操作(行の読み取り)」などでシンプルに取得すればよいと思います。

ただ、こういうパターンも結構あります。

  • A列は苗字、B列は名前で、これを全角スペースで連結して「苗字 名前」として使用する

  • D列の性別は数字だが、システムに入力するときは「男、女、その他」のような単語として入力する

  • X列が1のときはY列の値を使用し、2のときはZ列の値を、それ以外のときはW列の値を使用する

  • G列の値がブランクのときは、H列の値を半角に変換して使用する

  • ……

文字列を連結したり、全角/半角にしたり、数字を特定の文字列に変換するライブラリは存在しますが、あんまり多いと値を取得して使用する形式に整えるだけでも一苦労です。
しかも、データの列数が増減したり、値の法則が変わったりするとシナリオを修正しないといけません。

こういう場合は、「データ変換」用のシートを用意しておくと便利でした。

データ変換シートの例(データはダミー)

データファイルの形式がExcelなら、文字列の連結も全角半角変換も数字の置き換えも、数式で十分まかなえます。

流れとしては以下です。(値取得フロー)

  1. データ変換シートのB列の5~17行には、あらかじめ2行目の所定のセルから値を取得、必要に応じて数式が設定されており、シナリオで使用する形式の値に調整されている

  2. 元データシートから、処理対象行をコピーする

  3. データ変換シートの2行目に貼り付ける

  4. データ変換シートのB列5~17行目の値を取得する
    (WinActorなら「Excel操作(列の読み込み)」を使用すると便利※列カウントアップは解除しておく)

このように、①行コピー②行貼り付け③値取得の3ステップで済みますし、列が増減したり変換方法が変わったりしても数式で対応できる範囲なら、シナリオ修正は必要ありません。また、シナリオ作成者でなくても分かりやすくなります。

Excelは使うものの操作はあまり詳しくない、という部署の方から依頼いただくこともあります。
シナリオであれこれしている部分よりこのシートを見せながら説明した方が、「ある程度見慣れているExcelの画面」であることもあり、比較的分かりやすいような印象でした。

おわりに

個人的には「やってよかったかも〜」と思ったプチ工夫でしたが、なにぶんエンジニア経験などもない一人RPA作成者状態なので、気付けないところもたくさんあります。

「ここはもっとこうするといい」というのがもしあったら、ぜひ伺いたいです。
(もちろん自力でも探しに行きますが!)

以上、ご閲覧いただきありがとうございました。


12/10(土)はたまいさんの2本目(!)の記事、「WinActorでの設定ファイルの取得方法について書きました👍」です!