Automation 360でフォルダ内のファイル名を取得し、ファイルの数だけ繰り返し処理を行う方法


##はじめに
あるフォルダにあるファイルをRPAのロボットに処理させたいけれど、
ファイルの数やその名前が変わる場合、どのように処理させたら良いでしょうか。
今回はそんな場合に使えるループアクションの使い方を解説します。

##完成イメージ
基本的には、今回やりたいことはアクション2つで実現可能です。
実際は、下記の図でメッセージボックスが入っている部分に、対象のファイルに行いたい処理を入れておくイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/22b7739d-16c3-644c-fc37-891bc4229708.png)

##対象のフォルダー
今回はこのようなファイルが置かれたフォルダを対象としてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/74b0a1b4-9bc2-b428-b3c1-2a6abf5f0496.png)
早速やってみます。
##ステップ1: ループアクションを置く
左側のアクションメニューから「ループ」アクションを探して、フロー画面へ配置してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/4ab0847c-9829-cecc-4d45-f2cbc0651aa7.png)

##ステップ2: ループアクションを設定する
###「反復子」を選択する
赤枠の部分をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/83f3b287-904b-024c-861c-920231ba75ea.png)
###下記の「フォルダーの各ファイルに対して」を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/b72dea26-e076-b4bd-7255-39a3760bcddf.png)
###対象のフォルダーパスを記入する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/287983d7-a86c-19e9-a9a3-0bb8145be601.png)
###フォルダにあるファイル名を格納する変数を作成する
こちらのボタンを押します。今回作成される変数は「ディクショナリ変数」です。後ほど解説します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/969f69be-d297-94db-7398-0e8ed18c4144.png)
好きな名前で結構ですので、記入し、「作成して選択」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/a4fcfb41-3b16-8970-6e91-37ed34a59491.png)
###これでループアクションは設定完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/53d1a9e1-607d-da89-f09a-f3113e4fb8cb.png)

##ステップ3: ループ内にメッセージボックスを置く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/029474e6-567c-e218-47fb-3959c1bce0ce.png)

##ステップ4: メッセージボックスに作成したディクショナリ変数を挿入する。
###ファイル名をメッセージ内に挿入する
こちらのボタンから変数を挿入できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/fc7cb20b-aa94-5369-d86e-57017da48f66.png)

すると、以下のようなポップアップが出ますので、赤枠の部分をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/72097682-8abc-aecc-7360-6a3f1c753c6d.png)
さきほど作成したディクショナリ変数が一覧に出てきますので、選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/bcab8fdf-fa54-e25f-137b-0aa0cdcf9a9c.png)

ディクショナリ―キーの入力を求められますので、「name」と入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/b9db8e37-ad1e-b5dd-a96b-6a582dcab2be.png)

このように入っていれば成功です。一度実行してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/216e7c41-e22e-6c0f-0753-f85394f1f6b6.png)

このように、ファイル名が取得できています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/7a6892f2-ff12-c1f4-13bf-0134618eab37.png)


###ファイル拡張子をメッセージ内に挿入する
今度はファイルの拡張子を取得してみます。
同様にディクショナリ変数を挿入します。
今度はディクショナリキーに「extension」を入力して挿入しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/c3f0c6f6-b1a3-d139-9994-bbf49afe473b.png)

###仕上げ
こんな感じにメッセージ全体を加工します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/7004ecee-a803-454c-2e80-c3ee01ae2e7b.png)

##ステップ4:実行してみる
この通り、ファイル名を取得しながらフォルダにあるファイルの数だけ繰り返し処理をすることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/018a3cec-687e-9ac3-c16f-dc4423701e38.png)

##解説：ディクショナリ変数
###概要
ディクショナリ変数はその名の通り、辞書のような変数で、
名前 = "太郎"
苗字 = "座間江"
といった感じで、「キー」と「値」をペアにして格納していくことが出来ます。
（上記の例だと左側が「キー」、右側が「値」）

###ループアクションの「フォルダーの各ファイルに対して」により格納される値
今回使用した「ループ」アクションは、「フォルダーの各ファイルに対して」という反復条件を設定しましたが、
このアクションにはループの回ごとに値を取得し、ディクショナリ変数へ格納してくれる機能があります。

この機能でディクショナリ変数に格納される値は、「name」と[extension」というキーが割り当てられています。
例えば、損益計算書20201024.xlsxというファイルを読み取った場合は以下の通りになります。

```
name = "損益計算書20201024"
extension = "xlsx"
```

格納先のディクショナリ変数名を「dicFileName」とした場合、以下のように記述するとそれぞれ、ファイル名と拡張子を呼び出すことが出来ます。

```
$dicFileName{name}$
$dicFileName{extension}$
```


#応用編: 特定の文字列が含まれるファイル名にだけ処理を行う (Ifアクションとの組み合わせ）
今回の対象のフォルダには以下のファイルがありますが、特定の文字列を含むファイルだけ処理したい場合について解説します。

* test.csv
* DestinationFile.xlsx
* temp.xlsx
* Temp.csv
* blank.xlsx

例えば、上記でファイル名に「Destination」を含むファイルのみ処理したい場合、先ほど作成したBotにIfアクションを1つ追加すれば実現可能です。

### 応用編手順 1. Ifアクションを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/48e8c641-dab8-fa53-90d3-b220a06f00e5.png)

### 応用編手順 2. Ifアクションを設定する
まず、条件の「ディクショナリ」-> 「シングル値をチェック」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/609f10e6-f035-6d59-f85d-f6c0ba86c7ea.png)

以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/525001e8-c53d-16ff-1157-848b34dfdeb4.png)

### 応用編手順 3. Ifアクションの中に実行したい処理を入れる
これで完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/c9cc0d3e-dc55-729a-3230-a1860eef2131.png)

### 応用編手順 4. 実行してみる
実行ボタンを押してみましょう。
1回だけメッセージボックスが表示され、DestinationFile.xlsxのファイル名が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490870/8b8a0b4f-4f54-07a0-1dbc-fa44af2cf373.png)

実際は行いたい処理をメッセージボックスの代わりに入れますので、例えば、特定の文字列を含むこのファイルを読み込んでシステムへ登録する。といった事がこれで可能になります。