Automation AnywhereでのExcelからExcelへの転記をするチュートリアル（前編）

自分の備忘録も兼ねて。

Automation Anywhere Enterpriseの場合、割と直感的にBot開発が出来るので、
「こういう時はこうするんだろう」という具合に、あまり細かいところは書かなくても慣れている人は作れてしまうのですが、
初学者の場合はそうもいかないので、今回のチュートリアルでは、「細かっ・・・」というくらい親切に書いてみました。
この細かさのチュートリアルをいくつかやれば、感覚がつかめてきて、使用したことのないコマンドや、
やったことのない処理についてもひらめくようになっていくのでは、という期待のもと、作ってみました。

分かりにくい部分や、説明が足りない部分などあればお知らせください。

# 想定する業務

金融庁が公開している銀行の持ち株会社のリストがあり、これを自社のシステム登録用フォーマットへ転記したい。
（今回の例はデータの数が少ないですが、練習の場合はデータの数が少ないほうが分かりやすいので・・・。）


# データソース
こちら。
[免許・許可・登録等を受けている業者一覧（預金取扱等金融機関） - 銀行持株会社 - DATA GO JP](https://www.data.go.jp/data/dataset/fsa_20160201_0007/resource/fde40032-6a3d-404b-b268-ed3210e05b72)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/1116c7ce-5736-e71a-a010-1f9a4ca536ba.png)

#転記先のフォーマット

こんな感じの~~昭和~~ 平成を感じるシートを作ってみました。

[登録用フォーマット.xlsx](https://app.box.com/s/88yvrpo1frnu6phvjc4d8c9hcm7trvh7)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/8030e175-a2d4-733c-aa57-2e888eaa7807.png)

#手順
- Botを新規作成、ワークベンチを開く
- Excel -> Open Spreadsheetコマンドを挿入
- Get Cellsコマンドを挿入
- Loop -> Each Row In An Excel Dataset
- Message Boxを入れて動作を確認してみる
- 実際に使用するデータのある5行目から読み取るように改良してみる（If/Elseコマンドの使用)

#手順（詳細）
### 1. 新しいBotを作成し、ワークベンチを開く
### 2. Excel -> Open Spreadsheetコマンドを挿入。
（ドラッグアンドドロップか、ダブルクリックか、選択してEnter。）

下記の通り、読み込むExcelシートを選択。

※今回使うシートは4行目にヘッダーがあるけれども、Excelコマンドの「ヘッダーを含む」ではこれを排除できないので、今回は「ヘッダーを含む」にはチェックを入れない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/c1f980e6-8f71-b31a-aa10-971314c2033e.png)

### 3. Get Cellsコマンドを挿入
今回は「全セルを取得」を選択。
※ちなみに「複数のセルを取得」の場合、「A3からJ4000まで」といった範囲を絞って読み取ることも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/f0016329-8040-1115-879a-1764e8d61521.png)

### 4. Loopを挿入。
Excelシートを読み込む場合、各行を読み込むごとに・・・という条件のループを使う事が多いですが、今回もそれを使います。
Loop -> Each Row In An Excel Dataset
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/18ebd285-b918-27c1-2aa5-fc72a1d83a07.png)
下記はそのまま設定をいじらず、保存ボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/6d4086f9-336f-5ecf-8e77-0183f69c8890.png)
ここまでで、アクションリストの中身は以下のような感じになっているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/9b76cec5-e822-df6e-9b7e-d55838617983.png)
ループの中に、「ループ実行させたいコマンドをここに入れてください。\$Excel Column\$の変数を使うと各列の値が取り出せます。」というようなコメントが入っています。

### 5. Message Boxを入れて動作を確認してみる。
Message Boxをループの中に置いてみましょう。
先ほどのコメントにあったアドバイスの通り、\$Excel Column\$の変数を使ってみます。
変数を挿入するにはF2キーを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/d780a86c-d9e6-7982-cc86-217f43316d8a.png)

下記のようなダイアログが出てきますので、適当な変数をクリックして選択してから、「E」キーを何回か押すとExcel Columnの変数が出てきます。
（似た名前の変数があるので間違えないように要注意！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/6ac4c834-fe25-17be-5970-39306665187c.png)

「Insert」を押すと、今度は以下のようなダイアログが出てきます。
これは、「左から何列目の値を読んできましょうか？」と言ってますので、呼び出したい値のある列の番号を入れます。
今回は3を入れてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/a8fb6adc-654b-4eb6-be67-f3ffa2dba892.png)

OKを押すとBotのアクションリストは以下のような状態になっているはずです。
早速、Botを保存をしてから実行してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/35740ce4-167e-d8de-79ea-8c6f0b942ecd.png)

すると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/588a6e9e-6baa-5653-c59c-3ee69a6b1d71.png)
上記のような空のメッセージが3回表示されたのち、以下が表示され、以降、会社名が表示されていくはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/d911a7c6-ecd5-2cea-e256-00529dd7389a.png)

### 6. 実際に使用するデータのある5行目から読み取るように改良してみる（If/Elseコマンドの使用)
読み取るExcelシートの1-4行目は空白だったり、ヘッダーがあり、実際に読み取りたいのは5行目以降の値です。
そんなときにはどうしたら良いでしょうか？
色々なやり方がありますが、今回はIfコマンドを使ってみたいと思います。
If、ということで、「もし～～だったら、～～する。」、「もし～～じゃなかったら、～～する。」といった、
条件によって処理の内容を変えることが出来ます。

今回は1-4行目の場合はメッセージを表示しない。というような事をしてみたいと思います。

それを実現するためには、今何行目を読み込んでいるかを知る方法が必要ですが、Automation Anywhere Enterpriseには便利な変数があります。
#### Counter変数
その便利な変数とは、Counter変数です。
この変数はLoopの中でのみ有効ですが、Loopが何回実行されたか知ることが出来る変数です。
実際動くところを見たほうが、この変数の役割が分かると思いますので、Message Boxの中身を以下のように書き換えて動かしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/942b10cc-f1ff-7b3c-4cad-3cd910f6365a.png)

Botを保存して実行してみると・・・
ループ1回目の実行結果：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/7eb11bc1-bf8c-b1a8-021c-0246b6e0f653.png)

ループ4回目の実行結果：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/65437f68-f92b-59c6-e2a6-051ff1977592.png)

というわけで、今回の場合は、「Counter変数の値=現在読み込んでいるのが何行目か」ということですので、
Counter変数の値に注目して、この変数の値の変化をもとに、条件を指定してあげれば良いのです。
（とりあえず頭は納得していなくても、手を動かしていけば分かるはずなので、次に進みましょう。）

#### If/Elseコマンド
次に挿入するのはIf/Elseコマンドのうち、以下のものです。「Variable」ですね。
こちらをLoopの中に挿入してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/0698d71d-8a26-5479-a9a5-578cb279ce9d.png)

そうすると以下のようなダイアログが出てきますので、右下の黒い「編集」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/390ecc39-524b-12b3-a9cb-def29f6b7988.png)

さらに下記のようなダイアログが出てきますので、下記のように値を入れてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/2da11f05-40d1-a790-4d60-59897cf22f44.png)
保存ボタンを押してコマンドの設定ダイアログを閉じると、以下のようになるはずです。
いま設定した条件を満たす場合、IfとEnd Ifに挟まれたコマンドが実行されます。
今回の場合は、Counter変数の値が4より大きい場合。つまりは5行目以降を読み込んでいる場合のみ実行されます。

Message BoxをIfとEnd Ifの間に入れてあげてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/95faa64b-0821-8b62-9109-10051283ec3d.png)

以下のようになればOKです。実行してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/8579e7d3-3468-8691-dc29-34a08769ba17.png)

うまく行けば以下のように、1-4行目を無視して、5行目の値から表示していくはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/9eccc85a-eda8-4bcc-2acc-83948c0abc04.png)

##7. 前半分はひとまず完成、後半は・・・
前半はここまでです。後半では開いたExcelシートを閉じて、出力先のフォーマットをコピーして、コピーしたファイルに値を書き出していきます。
もしかすると3編に分けるかもしれませんが、また時間があるときにまとめる予定です。