初心者が話すUiPath　～Excel処理問題【懇親会編】 [2]～

今回は
[初心者が話すUiPath　～Excel処理問題【懇親会編】 [1]～](https://qiita.com/akira-f/items/70992e65e992d63b194c)
にて書いた、シチュエーションの自動化について書いていこうと思います。


## 作成予定の機能
前回も書きましたが、以下の内容を自動化していきたいと思います。

・一次会、二次会の参加予定人数の把握
・アンケート未回答者の把握
・excelのソート（参加、不参加、アンケート未回答）
・それぞれがいくら払うかの計算（役職に依存）
・部署ごとにexcelを分ける
・部署代表にexcelを添付し、メールで送る

[課題資料](https://drive.google.com/drive/folders/1AGNnW32SiZPx5SSo5dIBG9EECCw2ReXH?usp=sharing)（Googleドライブに飛びます）
※ダウンロードすると、同じ行全ての文字が合わさったものになってしまうので、
Webで表示し、コピーペーストをして作成、使用してください。
※作業途中で上記の内容はよく発生するので、別のフォルダで予備を保存しておくことをお勧めします。
こんなかんじで↓
<img width="209" alt="4.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/234754/929c733b-453d-2f8b-3a70-4a6cd6518c31.jpeg">予備用
<img width="214" alt="5.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/234754/c3f89eff-251a-25d7-a1b8-6f6b97d95c92.jpeg">xlamと同じファイル配下（実際に使用）


所持しているアンケート結果、各部署の名簿一覧.csvは
以下のようになっています。

↓アンケート結果
<img width="258" alt="3.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/234754/35e5f7b0-223a-b189-1188-6e5abc8c5f62.jpeg">

↓営業部名簿
<img width="187" alt="6.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/234754/0b85c6af-8f8c-210a-85db-b8d31595a404.jpeg">

準備出来ましたか？

## UiPathの新規作成
UiPathを開きます。

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/234754/5f7b4bf7-32ab-0170-a57c-9c7515f10825.jpeg)

いつも通り「Continue Free」をクリック。
適当な場所に適当なファイル名で、フローチャートを新規作成しましょう。
因みにこのTOP画面からの新規作成は、
Start > Simple Process　をクリックすることで可能です。

##流れの作成
どういった構成にするかを考えていきます。
本当は紙に書いていった方が良いのですが、
私は直接シーケンスを組みながら書いていく事多いです。

左のActivityからSequenceを引っ張り出してきます。
因みに、Sequenceを選択（黄色の状態）、
右クリック、Annotations＞Add Annotationをクリックすると、
メモのようなものを記入、設置することが出来ます。

<img width="221" alt="スクリーンショット (26).png" src="https://qiita-image-store.s3.amazonaws.com/0/234754/3256b319-9830-d8d9-00a3-52529794e672.png">


##部署の特定
部署の特定を行いましょう。

その為にはまずアンケート結果のエクセル情報を取り出します。

ActivityからReadCSVを持ってきます。
「...」をクリックすると、直接使用したいCSVファイルを選択することが出来ます。
もしくは右側のPropertiesからFilePathを直接記入で、ファイルの指定が出来ます。

<img width="198" alt="10.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/234754/a835c71b-1487-d770-e120-be54ecee184a.jpeg">

今回は「アンケート結果」のCSVファイルを選択します。
そしてPropertiesのOutput>DataTableにて、
このエクセルの情報を格納するDataTable型の変数を設定します。

（Ctrl+K を使用することで、Variablesにて変数を作成せずとも、
その場で変数を適切な型で生成することが出来ます。）

今回はresultDTという変数にしました。
（変数名つけるのまだまだ下手くそなんです。
　お許しください）

次にこのDataTableを回す機能を付けます。
回すってなんだ!?となると思うので、
ちょっと試してみましょう。

`For Each Row` を使用します。
使用するDataTableをセットします。
（今回はresultDT）
その中にWrite Lineを設置し、
row(0).ToString
と入力してみてください。

Write Lineはログ出力が出来ます。
Outputエリアに文字列等を出力できます。

row(0)は
エクセルデータの一列目のデータを指します。

試しにRunしてみましょう。

![11.jpg](https://qiita-image-store.s3.amazonaws.com/0/234754/be60b2b8-f28c-1be8-9adb-0a915cf48373.jpeg)

左下のOutputエリアに
ログが出力されています。

酷い文字化けですね！

本来ならば、「アンケート結果」のエクセルの
一列目に書かれている社員の名前が羅列されるはずが、
文字化けを起こしてしまっています。

こんな時の対処方は
Read CSV にてEncodingを指定します。
「"Shift-JIS"」と、入力し
再度Runしてみましょう。

![12.jpg](https://qiita-image-store.s3.amazonaws.com/0/234754/f9cdcd2c-9fe8-2284-9c0d-9781f6d30510.jpeg)

左下のOutputをご覧ください。
正常に名前が出力できています。

このように`For Each Row`はDataTableを一行ずつ巡っていきます。
一行見たら二行目、その次は三行目と、
存在するデータがなくなるまでぐるぐる`For Each Row`の中を何度も繰り返します。

では営業部の方だけ、ログ出力されるようにしてみましょう。

Read CSVを`For Each Row`の中に設置し、
営業のエクセルデータを格納する変数を作成しましょう。
（私は変数をsalesMemberDTにしました）

`For Each Row`の中に、もう一つ`For Each Row`を設置します。
今度はsalesMemberDTを回し、resultDTと比較していきます。

salesMemberDTの`For Each Row`のrowを違うものにしておきましょう。
混ざってしまうので。

ifを設置し、比較をしていきます。

これで、アンケート結果のデータを一行ずつ回し、
１人ずつ営業名簿に名前がないかチェックしていきます。
そして営業部の方だった場合、ログに名前が出力されるようになりました。

<img width="197" alt="13.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/234754/92406b29-3127-3fa5-9170-5c2399f69cd6.jpeg">

Runしていきましょう。

![14.jpg](https://qiita-image-store.s3.amazonaws.com/0/234754/13231a80-0727-a1b6-6974-8b4fb0e2c3d1.jpeg)

Outputに営業の方のみ、名前が出力されています。

成功です♪

　

　
　

今回はここで終わりにします！
エクセルの比較が出来るようになりました。
しかし営業部のみです。
この`For Each Row`を使用した比較をあと二つも設置すると、
ごちゃごちゃしてしまいますよね？

な　の　で

次はとある機能を使って、コンパクトにしていきたいと思います！

皆さんも考えてみてください！