Power Automate Desktop  の変数（1）「数値型」

## 概要  

Power Automate Desktop(以下PAD) の変数についての記事です。PADのベース言語[Robinのドキュメント](https://robin-language.org/)を参考に試したものをまとめました。PADの「変数」は私自身、最初に躓いた部分です。「変数の設定」アクションを中心に簡略化した例を挙げながら整理してみようと思います。全7回の予定です。

## 目次

1. **[概要、数値型](https://qiita.com/sys_zero/items/13e06a41834cf40988ea)**<今回の記事>
2. [テキスト型](https://qiita.com/sys_zero/items/0f5b54dd4dbbf0d31e71)
3. [Datetime型](https://qiita.com/sys_zero/items/7804ffffea5b244c46c4)
4. [ブール型](https://qiita.com/sys_zero/items/68deda047c4b50c66458)
5. [リスト型](https://qiita.com/sys_zero/items/82951049466791b2b728)
6. [データテーブル型](https://qiita.com/sys_zero/items/171d73ba24e123dd1b66)
7. [カスタムオブジェクト型](https://qiita.com/sys_zero/items/6006ab42e2af60c170b5)

## 注意

- すでに使いこなしているかた向けの記事ではありません。
- RobinはPADのベースとなっていますが挙動が異なる部分があります。
- この記事の内容はすべて試していますが公式の見解とは異なる可能性がありますのでご注意ください。
- Power Automateクラウドフローの入出力変数については触れていません。
- 2021年2月の記事です。
- あくまでも個人のまとめです。
- 誤りがありましたらコメントでご指摘いただけると幸いです。
- Robinの公式サイトは2021年4月30日に終了しました。



## 変数と型について  

一般的な変数は、名前を決める（変数名の宣言）、代入する（＝イコール）、データや関数、処理という形式で書かれることが多いです。

宣言（初期化）していない変数は使うことができません。
変数は代入する内容や処理によって型を持ち、型によって性質が変わります。たとえばテキスト型の変数に代入されている「数」は計算できません。型を大雑把に分類すると数値型、文字型、日時型、論理型、リスト型（配列）、データテーブルなどの型があります。また変数名とともに型を宣言する**静的型付け**と言語側で判断してくれる**動的型付け**があります。PADは型付けを代入するデータや処理の方法によって自動で行ってくれる**動的型付け**です。動的であるのは楽なのですが処理によっては型が変化してしまう可能性があるので注意が必要です。

## PADで使える変数型 　

* **数値型**　整数、小数等に区別はなく数値や数値に伴う処理を代入した場合の変数型。

* **テキスト型**  文字（テキスト値）や文字に変換する処理を代入した場合の変数型。内部にさまざまなプロパティを持っています。

* **Datetime型**  日付＋時間（datetime値）が代入されている変数型。おもに日時アクションで扱うことができます。内部にさまざまなプロパティを持っています。

* **ブール型** 判定などの比較演算や論理演算を代入した場合、真偽値が返されます。値はTrueかFalseで格納されます。

* **リスト型** 配列型とも呼ばれます。格納されている値が数値かテキスト値で型の呼び名が変わります。（の一覧数値）、（の一覧テキスト値）、（の一覧ブール値）、（の一覧一般の値）と現状ではなっています。内部に格納されたデータ数プロパティを持っています。

* **データテーブル型** 行と列からなる2次元配列のデータを格納した場合の変数型。Excelのテーブルのようですが値の座標が0ベースなので注意が必要です。内部にさまざまなプロパティを持っています。

* **カスタムオブジェクト型** JSON形式のデータを格納した場合の変数型。入れ子になった階層構造をプロパティ名と値で表現できます。

## 変数の設定と実行結果  

「変数の設定」アクションは変数名の初期化（宣言）や処理として使います。動的型付けなので型の宣言は必要がなく、宛先内の内容でPADが判断します。

![2021-02-11-18-02-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/8b1965f7-c814-e774-eda4-48c6d8937bcb.png)

#### 変数名  

* 設定に変数名を宣言します。
* アクションを設定した段階でデフォルト変数名が適用されます。
* 変数名は%で囲うのがPADのルールです。
* NewVarの部分を任意に書き換えることができます。
* %を使わなくても自動でPADが囲ってくれます。
* 変数名には記号、[予約語](https://docs.robin-language.org/robin-the-rpa-language/reserved-words/)、日本語等マルチバイト文字は使えません。
* 半角数字のみも使うことができません。

#### 宛先

* 日本語版では宛先となっていますが、これはRPA言語Robinが＝ではなくtoを使っているためこのような翻訳になっているのだと思います。
* 代入する意味でとらえて差し支えないと思います。
* 宛先内にはデータや処理、宣言済みの変数が記入できます。
* 宛先内に記入できるあらかじめ定義された関数は一部の変数プロパティを除き、ありません。
* 宛先内に記入できる最大文字数は半角65536文字です。
* 宛先を%で囲うと処理になります。
* %で囲った中に変数を記す場合、%は必要ありません。
* ```%%var1%+%var2%%```ではなく```%var1+var2%```になります。

#### 実行結果

* 実行結果は変数ペインにフロー変数として表示されます。
* フィルターアイコンから型を選択することで絞り込みが可能です。![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/1457f980-b040-b6ca-3ab4-16a8f3bc73d4.png)

* 変数ペインでは各変数をダブルクリックすることで型と実行結果が確認できます。![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/030c6b88-6e29-145f-3cba-793601d859dd.png)

* PADのアクションは上から順に実行されます。（順次実行）
* 同じ変数名で処理が行われた場合、最後のアクションの実行結果が変数に反映されます。![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/c00e89e6-063a-e381-d57e-c5e1b98b7365.png)

* 処理によっては動的に型が変化してしまうのでこまめに確認するのが無難です。
* 型の種類によっては関数のようなプロパティを持ち、別の変数として設定利用可能です。（例　文字数のLENやデータ数のCountなど）





## 数値型変数について

数値型変数は**ひとつの数値**を格納する変数です。オプションのプロパティ値をもちません。変数の設定アクションを中心に基本的な演算をいろいろ試してみます。

###　整数の代入
![2021-02-11-18-28-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/91b199e5-297f-329c-a198-519881f51eb3.png)

実行結果
![2021-02-11-18-29-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/565d9578-49bb-c025-5186-1ea0b27e9f49.png)

###　小数の代入
![2021-02-11-19-20-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/f9f2944e-f08d-8509-da51-1a52202f169a.png)

実行結果
![2021-02-11-19-21-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/1e219788-def2-2c20-80a3-14c071e3a9ea.png)


##　数値の丸め　

「変数の切り捨」てアクション」を用いると数値を丸めることができます。操作タブより図のオプションが使用可能です。
![2021-02-13-18-18-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/ae9567d8-a92a-d6e3-8173-fce0c618fca3.png)

実行結果
![2021-02-13-18-22-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/6755df7e-4bd2-1b25-3030-b03304099b8e.png)


##**加算（足し算）**
**宛先を%で囲うと処理になります。**
![2021-02-11-19-26-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/99c2f0ae-073f-a26d-248b-539042149428.png)

実行結果
![2021-02-11-19-26-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/7f3da4ae-1de8-83c9-b573-68a7e8ba9540.png)

**%で囲わない場合、テキスト値として認識されます。**　例の場合だと「1＋2」となります。
![2021-02-11-21-00-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/70cea1e0-29f7-1e0c-43fd-790551092ff1.png)

![2021-02-11-21-00-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/6a6d3f3f-7230-f7b1-e323-0a40d9d25ad0.png)

%で囲っても''シングルクォーテションで囲うとテキスト値になります。
![2021-02-11-21-25-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/44d68fd1-b95d-1ebb-6ac2-7e9539f0925c.png)

実行結果
![2021-02-11-21-26-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/cfbc4408-eba6-a2fc-40b4-7d2279a18570.png)

「数値をテキストに変換」アクションも同じ効果があります。
##**変数を使った加算**
![2021-02-11-19-29-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/2502be07-819f-b489-e1f8-6369c0591fd8.png)

実行結果
![2021-02-11-19-35-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/87d4b597-f123-c57b-3189-3ba7d2c72659.png)

テキスト値になってしまうケース。
![2021-02-12-18-22-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/5711a5ef-85c4-9d14-052d-e1e7676561f0.png)
実行結果
![2021-02-12-18-23-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/e40c5b03-7cfe-15f5-1b1c-bde2eaebf25c.png)

## **減算（引き算）**
![2021-02-11-21-04-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/c0b4a2cb-2822-efc2-da0e-de54b0807c21.png)

実行結果
![2021-02-11-21-04-59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/8367e792-421d-6ae4-a176-bfba2399ec20.png)


![2021-02-11-21-05-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/68e095bb-cf92-a1c2-e15c-a6abd38f93e4.png)

実行結果
![2021-02-11-21-05-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/3adb6a5d-c44e-28d0-2a5a-9a5fc3e97e37.png)

## **乗算（掛け算）**
![2021-02-11-21-07-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/89f002a0-e465-a9ee-a54d-d201f74b3172.png)

実行結果
![2021-02-11-21-08-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/caa3d02b-9e28-f2ac-27e3-c64bb0adfb9c.png)

## 加減よりも乗算が優先
![2021-02-11-21-11-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/198b7f34-b656-7b03-889e-e01fc8b6be5e.png)

実行結果
![2021-02-11-21-11-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/ba70dcde-b709-2fe6-516d-d821c442923e.png)

## 乗算よりも括弧が優先
![2021-02-11-21-13-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/34e189cd-6264-7afa-4f82-6524996d13a8.png)

実行結果
![2021-02-11-21-14-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/49ff7164-611b-4560-2a40-c86efe63628a.png)


## **除算（割り算）**

![2021-02-11-21-32-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/432c75b8-67f5-e9fc-f2ac-ea5ef8127be0.png)

実行結果
![2021-02-11-21-32-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/f7d0c7a6-0e7a-9d09-32b7-fe1f963922ab.png)


## 0で除算を行うと実行時エラー

![2021-02-11-21-36-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/5fe9cf06-3266-5ba8-ee33-57b55680b1e4.png)

実行結果
![2021-02-11-21-37-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/4e88c942-4523-8bad-11bf-f668c60df543.png)


## **除算による余り**
![2021-02-11-21-42-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/d035e7ce-7e7c-7fa1-f5d6-4b80c901766e.png)

実行結果
![2021-02-11-21-42-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/7bf523a0-ed34-5d5b-4054-81e42f9f7bcb.png)


## 除算による余り（変数）
![2021-02-11-21-44-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/d2878e2e-c09b-9cbc-66d4-64ca828b6d9e.png)

実行結果
![2021-02-11-21-45-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/ba3b50d7-c818-a28c-6fce-b9a64eba20e3.png)


## 「変数を大きくする」「変数を小さくする」アクションと「変数の設定」アクション

ループで使用することが多いこれらのアクションは先に変数を宣言する必要があります。
![](2021-02-13-18-35-30.png)![2021-02-13-18-35-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/00164855-d5d5-deee-4a72-90b0c15dbbaa.png)

このアクションは「変数の設定」アクションでも表記が可能です。
![](2021-02-13-18-38-57.png)![2021-02-13-18-38-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/98094c8f-8f6d-9413-5308-a874d225d1eb.png)

ただし内部でのコード表記は異なります。（下記コード参照）実行速度までは検証していないためご注意ください。

## コード

```PowerAutomateDesktop
SET num1 TO 1
SET num2 TO 3.3
SET sum TO $'''1 + 2'''
SET sum2 TO num1 + num2
SET sum3 TO $'''%num1%+%num2%'''
SET Textnum TO $'''%'1'%'''
SET dif TO 2 - 5
SET dif2 TO 1 - dif
SET mul TO 5 * 2
SET mul2 TO dif + dif2 * mul
SET mul3 TO (dif + dif2) * mul
SET div TO 10 / 3
DISABLE SET div2 TO 3 / 0
SET mod1 TO 10 mod 3
SET mod2 TO mul2 mod mul3
SET var1 TO 0
SET var1 TO var1 + 1
Variables.IncreaseVariable Value: var1 IncrementValue: 1 IncreasedValue=> var1
```

## 今回のまとめ

あらてめてPADの変数や型について言語化しようと思ったら結構難しいです。
「言語化が難しく感じるのは自分の理解が足らない」ということを理解しました(;'∀')
便利なアクションもたくさんありますが、まず「変数の設定」アクションを使い込んでみるのも良いと感じました。
とても地味な記事ですが後々威力を発揮すると思います。
Datetime型やブール型、リスト型、データテーブル型になるといろいろ応用できます。
回数が多くなりますが、自分自身の理解を深めるために、完走できるよう頑張ってみます。

## 参考
[Robin - RPA language](https://robin-language.org/)
[Power Automate Desktop の変数の処理 - Learn - Microsoft Docs](https://docs.microsoft.com/ja-jp/learn/modules/pad-variables/)