兎の真似をする烏

全力で"楽"である為に・人生が"面白く"ある為に

RPAの手頃な例題に取り組んでみた

例題

以下のような賃金台帳のエクセルのデータが提出される。

No タイトル データ内容
1-1 社員コード 主キー
1-2 社員名 従業員名
1-3 基本給 基本給が記載されている。
しかし、ほとんどの人に入力はない
1-4 支給額合計 支給総額
1-5 健康保険料 健康保険料
1-6 厚生年金料 厚生年金保険料
1-7 雇用保険 雇用保険
1-8 社会保険料合計 (1-5)~(1-7)の合計額
1-9 課税対象額 「(1-4) - (1-8)」の計算で求められた金額
1-10 所得税 所得税
1-11 住民税 住民税
1-12 非課税通勤費 非課税区間における通勤費。
全従業員に必ずあるわけではない。
1-13 課税通勤費 12の区間をオーバーした分の通勤費。
全従業員に必ずあるわけではない。
1-14 管理職手当 手当のひとつ
1-15 夜勤手当 手当のひとつ
1-16 時間外手当 手当のひとつ
1-17 差引支給額 「(1-4) - (1-8) - (1-10) - (1-11)」の計算結果で求められた金額

これを担当者が管理している賃金台帳へ転記するという作業があるらしい。
担当者の賃金台帳の形式は以下の通り。

No タイトル 転記内容
2-1 社員名 (1-2)
2-2 基本給 「(1-4) - (1-12) - (1-13)」の計算結果で求められた金額。
(1-3)にまともな数値が入っていればこんな珍妙な計算は要らないのだけど(´・ω・`)
2-3 通勤手当非課税 (1-12)
基本給から2つ空白行があった後に記載される
2-4 通勤手当課税 (1-13)
2-5 合計 (2-2)から((2-4)までの合計額
エクセルに数式が入っている。
2-6 健康保険料 (1-5)
2-7 厚生年金保険料 (1-6)
2-8 雇用保険 (1-7)
2-9 住民税 (1-11)
2-10 所得税 (1-10)
2-11 控除合計 (2-6)から(2-10)までの合計額
エクセルに数式が入っている。
2-12 支給額 「(2-5) - (2-11)」の計算結果で求められる金額
エクセルに数式が入っている。

要はエクセルデータを他のエクセルデータに貼り付けるだけの作業。
VBAでやる方が処理時間も早く終わらせることができるだろうけど、RPAを勉強しているのでそちらで実現してみたい。

問題点

当例題をこなすうえでエラーを出してしまった内容をピックアップ

データの記載方向

先方から提出されるエクセル資料はテーブル形式(1行目にタイトルがあり、2行目以降がデータ)のものである。
しかし、担当者が管理しているのは多重クロス集計表(1行目に社員名がならび、1列目に基本給や健康保険料などの項目が並ぶ。要はタイトルが二つある)の形式を採っている。
そのため、データ転記をする際は取得してきたデータを列方向(横方向)に展開しないといけない。

列名は「A」や「AX」のように数値ではなく文字列で表現されるため、これを解決しなければ転記はできない。

調べてみると、列番号(数値)を列名(英字)に転換する良い例を紹介しているページがあったので参考にした。

Zawanii : 【UiPath】Excelの列番号をアルファベットに変換する

ここで紹介されている手順をxamlに記載し、引数に列番号を戻り値に列名を返却するように設定して組み込んだ。
処理としては以下のような感じ。

f:id:crowrabbit1212:20210204095050p:plain

nullの取扱い

担当者が管理しているエクセルデータでは、基本給は計算して出力する必要がある。このとき、通勤費は従業員全員に支給されているわけではない。そのため、空のセルを読み込みむこともある。そうした場合、計算する過程で「CInt」を使用するとエラーが発生する。
これを解決する方策として、以下のページに紹介されている方法を採用した。

Uipath道場 : 文字列が空かどうかチェックする

条件分岐の条件として「String.IsNullOrEmpty()」を使用して、Nullもしくは空文字の場合はTrueが返却されるので、その場合は何も処理をしないように処理を施した。

結論

担当者のエクセルのデータ形式を見直したほうが良いと思う。
よほどの理由が無いのであれば、今の形式は一方的に不便を強いているようにしか感じない。

UiPathStudioでフロースイッチを使用してみる

やりたいこと

フロースイッチを使用して複数分岐を表現してみたい。

フローチャートで作成する処理例

  1. 入力ダイアログに名前を入力してもらう。
  2. 入力内容を変数に格納する。
  3. 変数の内容を確認して処理を分岐させる。
    1. 変数が"空"なら「名前を入力してください」とメッセージを表示して一番初めに戻る。
    2. 変数が "佐藤" なら「久しぶり!佐藤!!」とメッセージを表示する。
    3. "空"でも"佐藤"でもない場合は「初めまして!XXXさん!!」とメッセージを表示する。

フロースイッチ

アクティビティパネルから「フロースイッチ」を選択して配置する。
プロパティパネルより以下のように設定を施した。

  • Type Argment
    ⇒ String

  • ⇒ Name

f:id:crowrabbit1212:20210126214159p:plain

入力が「空」の場合

分岐の矢印を選択することで、プロパティパネルから条件を指定できる。
空を指定するには二つの矢印を使用して以下のように指定する必要がある。

  • Case
    ⇒ null
    ⇒ empty
  • Is Default Case
    ⇒ False

nullとemptyの両方を示さないといけない理由は、入力ダイアログに何も入力せずに次に進んだ場合は変数にnullが格納されるが、一度でも名前を入力した後に空にして次に進むと変数はemptyとなるため。

f:id:crowrabbit1212:20210126214226p:plain

入力が「佐藤」の場合

条件分岐の矢印を以下のように指定する。

  • Case
    ⇒ 佐藤
  • Is Default Case
    ⇒ False

f:id:crowrabbit1212:20210126214256p:plain

入力が「空」でも「佐藤」でもない場合

条件分岐の矢印を以下のように指定する。

  • Case
    ⇒ Default
  • Is Default Case
    ⇒ True

f:id:crowrabbit1212:20210126214333p:plain

実行

実際に動作させてみて、思惑通りの条件分岐処理ができていることを確認する。

UiPathStudioでフローチャートを使用してみる

やりたいこと

フローチャートで処理を作成したい。

シーケンスとフローチャート

UiPathで処理を作成する場合、デフォルトではシーケンスが選択される。
シーケンスは複雑な処理が発生せず、開始から終了までが一直線に処理が流れるようなときに使用する。単純な処理を表現する場合はシーケンスの方が綺麗に書き表すことが可能。

フローチャートは複雑な分岐があったり、処理を前に戻したりする必要がある場合など、少し凝った処理を書き表す際に使用する。

フローチャートを使用するには

アクティビティパネルにて「フローチャート」を選択して配置することで、フローチャートで処理を書き表すことができるようになる。

f:id:crowrabbit1212:20210126210252p:plain

フローチャートで作成する処理例

  1. 入力ダイアログに名前を入力してもらう。
  2. 入力内容を変数に格納する。
  3. 変数の内容を確認して処理を分岐させる。
    1. 変数が空なら「名前を入力してください」とメッセージを表示して一番初めに戻る。
    2. 変数が空でないなら「こんにちは!XXXさん!!」とメッセージを表示する。

前回

crowrabbit.hatenablog.com

とほぼ同じ処理をフローチャートで表現してみる。
入力ダイアログやメッセージボックスの配置などは前回と同じなので省略。

フロー条件分岐

アクティビティパネルから「フロー条件分岐」を選択して配置する。
分岐条件などはプロパティパネルから行えばよい。

実際に作成すると以下のような感じになる。

f:id:crowrabbit1212:20210126210318p:plain

実行

実際に動作させてみて、思惑通りの条件分岐処理ができていることを確認する。

UiPathStudioで条件分岐を使用してみる

やりたいこと

処理の条件分岐をさせたい。

簡単な例

  1. 入力ダイアログに名前を入力してもらう。
  2. 入力内容を変数に格納する。
  3. 変数の内容を確認して処理を分岐させる。
    1. 変数が空なら「名前を入力してください」とメッセージを表示する。
    2. 変数が空でないなら「こんにちは!XXXさん!!」とメッセージを表示する。

このとき、1、2の処理については前回の

crowrabbit.hatenablog.com

の通りなので記載は省略する。なので、ユーザが入力した名前は "Name" という変数に格納されることを前提として条件分岐の処理を作成する。

条件分岐

アクティビティパネルから「条件分岐」を選択して配置する。
条件分岐の各項目の意味は以下の通り。

  • Condition
    ⇒ 分岐する条件を指定する。
  • Then
    ⇒ 条件が"真"の時に実行する内容を指定する。
  • Else
    ⇒ 条件が"偽"の時に実行する内容を指定する。

今回は "入力された名前が空の場合" という条件を指定し、"真"と"偽"の時で表示するメッセージ内容を変更させる。

以上の事柄を踏まえて、Conditionには『Name = ""』を指定する。
Then(真)にはアクティビティから「メッセージボックス」を選択して配置する。メッセージ内容には『"名前を入力してください"』と指定する。
Else(偽)にはアクティビティから「メッセージボックス」を選択して配置する。メッセージ内容には『"こんにちは!" + Name + "さん!!"』と指定する。("Name"は変数)("+"は文字列結合)

実際に配置したら以下のような感じになる。

f:id:crowrabbit1212:20210125222814p:plain

実行

実際に動作させてみて、思惑通りの条件分岐処理ができていることを確認する。

UiPathStudioで変数を使用してみる

やりたいこと

『変数』を使用したい。

簡単な例

  1. 入力ダイアログに名前を入力してもらう。
  2. 入力内容を変数に格納する。
  3. ログに出力する。

入力ダイアログを設置

アクティビティパネルから「入力ダイアログ」を選択して配置する。

  • ダイアログのタイトル
    ⇒ "入力画面"
  • 入力ラベル
    ⇒ "名前を入力してください"
  • 入力の種類
    ⇒ テキストボックス
  • 入力した値
    ⇒ Name

ここで、「入力した値」に指定したのが 『変数』である。

画面下部にある「変数」タブから、変数の作成ができる。
それぞれ以下のように指定。

  • 名前
    ⇒ Name
  • 変数の型
    ⇒ String
  • スコープ
    ⇒ シーケンス

以上までの作成結果としては以下の通り。

f:id:crowrabbit1212:20210125204858p:plain

ログに出力する

アクティビティパネルから「メッセージをログ」を選択して配置する。

  • ログレベル
    ⇒ info
  • メッセージ
    ⇒ Name

以上までの作成結果は以下の通り。

f:id:crowrabbit1212:20210125204914p:plain

実行

実際に動作させてみると、入力ダイアログに入力された名前が出力(ログ)にアウトプットされているのが分かる。

UiPathStudio - パッケージの管理・導入について

パッケージについて

以下のパッケージがおすすめとのことなので導入しておく。

それぞれがどのようなものかはリンク先から確認できる。
(これらのパッケージは不必要だと考える場合は導入しなくていい)

導入方法

UiPath Studio のエディタ画面にて、ヘッダににある「パッケージ管理」から現状確認や新規追加などを行うことができる。
上記でしらべたパッケージを導入するには、マーケットプレースから実施できる。

「かんたん Basic アクティビティパック」導入

検索窓から「UiPathTeam.Basic」で絞り込むと表示されるので、選択してインストールを実施

導入後、アクティビティパネルに「UiPathTeam」とういう項目が追加され、その配下に「Basic」が配置されていることがわかる。導入した機能を使用したい場合はここから使用したらいい。

「かんたん Excel アクティビティパック」導入

検索窓から「UiPathTeam.Excel」で絞り込むと表示されるので、選択してインストールを実施

導入後、アクティビティパネルに「UiPathTeam」とういう項目が追加され、その配下に「Excel」が配置されていることがわかる。導入した機能を使用したい場合はここから使用したらいい。

「Subtitle Activity - 字幕アクティビティ」導入

検索窓から「UiPathTeam.Subtitle」で絞り込むと表示されるので、選択してインストールを実施
途中でライセンスへの同意を求められるので「同意する」をクリックする。

導入後、アクティビティパネルに「UiPathチーム」とういう項目が追加され、その配下に「字幕」が配置されていることがわかる。導入した機能を使用したい場合はここから使用したらいい。

その他

その他にも気になるパッケージがあれば導入して使用して見れば良いとおもう。

UiPathStudioでレコーディング機能を使用してみる

やりたいこと

レコーディング機能をしようしてワークフローを作成したい。
作成する処理はメモ帳に「Hello World !!」と記入して保存するというものを行う。

やってみる

レコーディング画面を開く

UiPath Studio のエディタのヘッダメニューにある「レコーディング」から実施することができる。

レコーディングには以下の6種類が用意されている。

  1. ベーシック
  2. デスクトップ
  3. Web
  4. 画像
  5. ネイティブCitrix
  6. コンピュータ ビジョン

基本的に1のベーシックを使用することになる。

2のデスクトップは単一のデスクトップアプリケーションの自動化の際に使うと良いとされているらしい。
3のWebはWebアプリケーションに対する自動化を行う際に使うもの。

今回は1を使用する。
すると、以下のような「ベーシックレコーディング」という画面が表示される。

f:id:crowrabbit1212:20210124131153p:plain

レコーディング実施

アプリを開始

「アプリを開始」からメモ帳を指定する。
(あらかじめメモ帳を開いておく)

アプリケーションを開く際に引数が必要であるかの確認がされる。今回は特に指定しなくてよいのでそのままOKボタンを押下。

f:id:crowrabbit1212:20210124131216p:plain

レコーディング開始

「レコーディング」からレコーディングを開始することができる。
アクティビティパネルから作成する方法のような流れでどんどんと作成していけば良い。

Hello World !!」と入力

テキストの入力の際には以下のような入力を求められる。

f:id:crowrabbit1212:20210124131246p:plain

今回はメモ帳に「Hello World !!」と入力したいのでそれを入力する。
また「フィールド内を削除」にチェックを入れておくと、既に入力されている内容を削除したのちに実施される。

「ファイル」選択

新規保存を選択するために「ファイル」を選択する動作を実施しようとすると以下のようなアンカーを使うかの質問をされる。

f:id:crowrabbit1212:20210124131306p:plain

今回はアンカー使用は無いため、「このレコーディングセッションでは、再度このダイアログは表示しない」にチェックを入れた後に「いいえ」ボタンを押下する。

「名前を付けて保存」~「保存」

特別な操作を求められないため迷うことは無いと思う。
動作が終了したら「ESC」よりレコーディングを終了する。

レコーディングの終了

「保存&終了」を押下してレコーディングを終了する。

UiPath Studio のエディタに戻り、ワークフローが出来上がっているのを確認する。

f:id:crowrabbit1212:20210124131338p:plain

実際に動かしてみて要求通りの動作をしていれば完了!!