RPAツールUiPathを使って出退勤時刻を記録する

# RPAツールUiPathを使って出退勤時刻を記録する

## 概要
UiPathを使う機会があったため、試しに毎日の出退勤時刻記録を自動化してみます。※1
今回はあらかじめ勤怠の記録用に作成しておいたExcelファイルに出勤時刻と退勤時刻を記録できるようにすることが目標です。


※1 UiPathを実行した日時の出退勤時刻を記録します。

## 実行環境
- OS:Windows 7

## 目次
1. 事前準備
    1. UiPath(UiPath Studio)のインストールの実施
    2. Excelファイルの作成
2. 出勤時刻記録ロボットの作成
    1. プロジェクトの作成
    2. 出勤時刻の取得
    3. 出勤時刻の記録
    4. 実行
3. クリック動作用バッチ作成
4. 退勤時刻記録ロボットの作成


## 1. 事前準備
ここでは下記の二つを行います。
1. UiPath(UiPath Studio)のインストールの実施
2. Excelファイルの作成

### 1. UiPath(UiPath Studio)のインストールの実施
[公式ホームページ](https://www.uipath.com/freetrial-or-community)より指定された情報を入力しインストールを行います。
指定要件を満たしていると無料で利用できるCommunity版もあります。

### 2. Excelファイルの作成
自分の出勤時刻等を記録するためのExcelファイルを作成しておきます。
今回は下記のようなExcelファイルを作成しました。

![UiPath_Excelファイル中身.png](https://qiita-image-store.s3.amazonaws.com/0/139291/a385f8b0-d1cf-32cc-9fd9-15e40e14f410.png)



## 2. 出勤時刻記録ロボットの作成
それではインストールしたのUiPath Studioを起動して勤怠記録用のロボットを作成します。

### 1. プロジェクトの作成
起動画面から「Simple Process」をクリックします。
プロジェクトディレクトリ名(Name)と配置場所(Location)、プロジェクト概要(description)を記載し、「Create」を押下します。

![UiPathプロジェクト作成.png](https://qiita-image-store.s3.amazonaws.com/0/139291/ace93ccd-9e55-79c3-9969-4dd1931d22e9.png)

画面中央のパネル(メインパネル)にデフォルトで作成されているものがありますので、「Start」を除いて削除します(下図赤枠部分)。
削除は削除したいアクティビティ(Data Input等)を選択してdeleteキーで削除できます。

![UiPath削除.png](https://qiita-image-store.s3.amazonaws.com/0/139291/1af93e4c-a921-834f-7e48-0e03df863055.png)

まずは、画面左側のパネル(アクティビティパネル)から今回に必要な作業フローとして「Sequence」をメインパネルにドラッグ&ドロップします。
アクティビティパネルに検索が用意されているのでそれで探すと便利です。

配置した「Sequence」の名称をクリックすると名称の変更ができるので見返した際にわかりやすいよう適宜名称を変更します。

ドロップした「Sequence」を「Start」のアクティビティとつないでおきます。

![UiPath_Sequence.png](https://qiita-image-store.s3.amazonaws.com/0/139291/05935ec0-233e-a4f5-3310-0f1078af47d1.png)



### 2. 出勤時刻の取得
メインパネルに配置されている「Sequence」(出勤時刻の取得)をダブルクリックします。
すると「Sequence」アクティビティ内の編集に移ります。

この中では出勤時刻を取得するためにアクティビティパネルから「Assign」を二つ配置します。
ここでは、配置した「Assign」を「月日の取得」と「時刻の取得」に名称変更しておきます。

![UiPath_Assign.png](https://qiita-image-store.s3.amazonaws.com/0/139291/c392da6d-61b4-6a83-a16c-2e903d60cf5d.png)

次に今回使用する変数を定義しておきます。
画面下部のタブにある「Variables」をクリックします。ここではこのプロジェクトで利用できる変数を定義しておくものです。
今回は、「days」と「time」の二つの変数を作成します。

作成のやり方は次の通りです。

1. 「Create Variable」をクリックして変数名を入力します
2. 作成した変数行の「Variable type」を「String」に変更します ※2
3. 「Scope」を「Main」に変更します ※3

※2 変数の型を変更しています
※3 変数の利用範囲を変更しています

![UiPath_変数.png](https://qiita-image-store.s3.amazonaws.com/0/139291/06efe916-cfdf-980c-baba-2facf05f3097.png)

変数を作成したら配置済みの「Assign」の「To」に作成した変数名を設定します。
そして「=」をはさんだ右側の入力欄(「Value」)には下記の記述を行い、ロボット実行時の月日と時刻を変数に格納するようにします。

- 月日の取得：「Today.ToString("MM/dd")」
- 時刻の取得：「Now.ToString("HH:mm")」

![UiPath_時刻.png](https://qiita-image-store.s3.amazonaws.com/0/139291/6d5f05fb-3301-fe51-78eb-d35ba3508a52.png)

ここまでで出勤時刻の取得は完了です。画面左上の「Main > Main > 出勤時刻の取得」の「Main」をクリックし元の画面に戻ります。

### 3. 出勤時刻の記録
次に「出勤時刻の記録」の「Sequence」をダブルクリックし、出勤時刻の記録部分を作成します。

この「Sequence」の中では下記のことを行います。

1. 出勤時刻の書き込み先Excelファイルの指定
2. excelファイル内の書き込み日付箇所の特定
3. 出勤時刻の記載

#### 1. 出勤時刻の書き込み先Excelファイルの指定
Excelファイルの指定を行います。
アクティビティパネルから「Excel application scope」をメインパネルに配置します。

![UiPath_Excel.png](https://qiita-image-store.s3.amazonaws.com/0/139291/9d7225d9-563b-0c66-f2d5-a2d1d1553ec6.png)

「Excel application scope」内の「Workbook path. Text must be quoted」の部分に記載を行うExcelのファイルパスを記載します。

![UiPath_Excelパス.png](https://qiita-image-store.s3.amazonaws.com/0/139291/b6e8aee5-1ad2-9a8d-7c5d-71932e34c3c0.png)


#### 2. Excelファイル内の書き込み日付箇所の特定
出勤時刻は、このロボットを実行した日付けに出勤時刻のセルに記入する必要があります。
そのため(実際他にもっと便利な方法はあるかもしれませんが)今回は下記の方法で記載セルを特定し記載します。

1. Excelの「A」の列のセルを取得する
2. 取得した「A」のセルの内、「days」変数に格納されている今日の日付と一致する行番号を取得する
3. 「B」列+今日の日付と一致した行番号の欄を指定して出勤時刻を記載する

そのため、まずは、「A」列のセルを取得します。アクティビティパネルから「Read Column」をメインパネルに配置します。
そして、配置した「Read Column」にクリックすると右側のパネル(プロパティパネル)に「Read Column」の情報が表示されます。

その中の「Result」では読み込んだExcel情報を格納する変数を設定できます。
「Result」の入力欄をクリックし、「Ctrl + k」を押します。すると、「Variable」での変数作成と同じく利用する変数を設定することができますので、「Set Name」の表記に続いて、変数名(今回は「readColumn」)を設定します。

![UiPath_columnName.png](https://qiita-image-store.s3.amazonaws.com/0/139291/ad9887f5-b471-e14e-a197-25db1394e8ab.png)

これで変数「readColumn」の中にA列のセル情報が入るようになります。

次にA列の中から本日日付を取得します。
アクティビティパネルから「For each」アクティビティをメインパネルに配置し、「in」の後の入力欄にA列のセル情報を格納してある「readColumn」を指定します。

こうすることで、「For each」アクティビティはreadColumnに格納されている情報の数だけループ処理を行います。
その中で本日日付にあたる場合のみ、出勤時刻の書き込み処理を行いたいため、条件処理の分岐判定を行います。

アクティビティパネルから「if」を「For each」内の「body」に配置します。
そして条件を判定する「Condition」には「item.ToString = days」を記載します。
この記載によって本日日付の場合だったら、「If」アクティビティ内の「Then」の処理が実行されます。

![UiPath_IF.png](https://qiita-image-store.s3.amazonaws.com/0/139291/cc7448a9-5021-5e2c-4582-732cb86b35b3.png)

#### 3. 出勤時刻の記載
出勤時刻の記載を行うセル番号を指定するためにセル番号のカウンタを作成します。

「Variables」から変数として「cellCount」を作成し、「Variable type」を「Int32」、「Scope」を「出勤時刻の記録」で作成します。
アクティビティパネルから「Assign」をメインパネルの「For each」前に配置し、作成した変数「cellCount = 1」を設定します。

![UiPath_cellCount.png](https://qiita-image-store.s3.amazonaws.com/0/139291/a8ec77e5-a743-37bd-6bd1-2043debd685d.png)

次に「If」の中の「else」部分に「Assign」を配置し「cellCount = cellCount + 1」を指定します。
この操作で本日日付と一致するまで、セル番号が一つずつ増えていきます。

![UiPath_cellIf.png](https://qiita-image-store.s3.amazonaws.com/0/139291/446e8088-e77e-b6aa-7554-caf181536ed7.png)

では最後にExcelに出勤時刻を書き込みます。
アクティビティパネルから「Write Cell」をメインパネルの「If」の「Then」内部に配置し、
「A value or a formula. Text must be quoted」に出勤時刻として「time」を記載します。
また、記載するセルとして「"B" + cellCount.ToString」を記載します。

![UiPath_writeCell.png](https://qiita-image-store.s3.amazonaws.com/0/139291/a68ab099-8134-5a85-4b94-4725e7c2e78a.png)

#### 4. 実行
出来上がったロボットを実行します。
UiPath Studioの画面上部の「Run」もしくは、「F5」キーで実行できます。
問題なく動作すれば、指定の日時に記載が行われているはずです。

![UiPath_Run.png](https://qiita-image-store.s3.amazonaws.com/0/139291/7b4c0e29-eb63-fa6d-ba75-fd9d617a30e3.png)

実行後ファイル

![UiPath_writeAfter.png](https://qiita-image-store.s3.amazonaws.com/0/139291/dd5d186b-5154-ccee-c255-22199b9b7107.png)


## 3. クリック動作用バッチ作成
毎回UiPathを開いて実行する(もしくは実行コマンドを入力する)のは面倒なので、簡単なバッチファイルを作ります。
UiPath Studioをインストールした際に入ってくる「UiRobot.exe」を指定しつつ引数に作成したロボットのパスを「/file:」以下に記載します。
今回の場合、下記のようなバッチファイルになります。

```bat:rpa.bat
@echo off
rem %filePath%の部分に作成したロボットのパスを記載します
call "C:\Program Files (x86)\UiPath Studio\UiRobot.exe" /file:"%filePath%Main.xaml"
exit /b 0
```

あとはバッチファイルの紐付を行えば、ダブルクリックだけで出勤記録をつけることができるようになります。


## 4. 退勤時刻記録ロボットの作成
基本的に出勤時刻記録ロボットと同じです。出勤時刻記録ロボットのファイル(Main.xaml)をコピーします。
コピーしたファイルの中から「Write Cell」で記載するセルを「"B" + cellCount.ToString」から隣のセル「"C" + cellCount.ToString」に変更するだけで退勤時刻を記録できます。