【PowerAutomateDesktop】変数を使ってExcelからDataTableを取得する方法と注意点



変数を使ってExcelからDataTableを取得する方法を紹介します。


## 変数を使ってExcelからDataTableを取得する

今回取得する予定のExcelデータはこちらです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/872556da-b090-6799-0393-c827e8cb3ced.png)

それでは、さっそくPADで[Excelの起動]アクションで、こちらのExcelを開いていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/e696829c-9842-1460-214f-3c031a3ebd22.png)

ExcelからDataTableを取得するためには、[Excelワークシートから読み取る]アクションを利用するのですが、最終列や最終行をベタ書きしてしまうと行や列が追加された場合に毎回フローを編集しなければならず手間になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/c21c0671-afa6-300c-1be2-a3f3f7b0ba51.png)
※べた書きした例↑↑↑

そのため、最終列と最終行をそれぞれ保持する変数を用意します。

変数作成のためには、[Excelワークシートから最初の空の列や行を取得]アクションを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/7e575f1a-7101-2dda-1bf0-d51390996c7b.png)

実行すると、`FirstFreeColumn`と、`FirstFreeRow`という変数が自動生成されました！
![スクリーンショット 2023-07-20 180602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/3aa71f20-44e2-e6a9-5f1a-8e7159ce721d.png)

値にはそれぞれ、"4"と"9"という数字が格納されています。
Excelを確認すると…、きちんと最初の空白の列番号と行番号が取得されていることが分かります。
![スクリーンショット 2023-07-20 180943.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/8f5f8cc0-8e73-5c30-771a-66ee7b6a9286.png)

変数の用意ができたので、[Excelワークシートから読み取る]アクションにセットしていきます。
{x}をクリックすると、既存の変数を選ぶことができます。
変数は%で囲って使用します。
![スクリーンショット 2023-07-20 181654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/58069800-e9a5-beef-0b03-7e09297130c0.png)

変数`FirstFreeColumn`と、`FirstFreeRow`が-1されていることにお気づきでしょうか？
[Excelワークシートから読み取る]アクションを利用して取得したいセル範囲は、以下オレンジで囲った部分になるため、それぞれ-1をします。
![スクリーンショット 2023-07-20 180943.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/b83377a6-53b7-3489-bbe5-9e698fc672f1.png)

ヘッダーカラム付きのExcelの場合、詳細>範囲の最初の行に列名が含まれていますをオンにしてあげるのを忘れないようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/0673e382-2650-3e69-12f3-7e1e3d9b68d3.png)


## 作成したフロー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/bf60617b-b417-8d59-c6b3-34e4e1cdfd18.png)

こちらを実行すると、無事に変数を使用してExcelからDataTableを取得することができました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/03a56185-cd96-9769-19c5-aeb5081c917d.png)


## 注意点

[Excelワークシートから最初の空の列や行を取得]アクションを使用するにあたって、注意点が2点あります。

#### 注意点①
当たり前ではありますが、以下のようなデータの場合、E列、10行目が最初の列、行として取得されます。意図しない範囲を取得しないように、Excelデータの値にはご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/15557742-f97e-c0ac-f7e5-099cdbfacd43.png)


#### 注意点②
注意点①と通ずる部分がありますが、もう一点紹介させていただきます。
こちらのExcelは、先ほど無事取得したExcelと同じように見えますが…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/1174ee1a-d49e-2c30-9b29-d70f4c5ff2a5.png)

フローを実行すると、なぜか正しく値が取得出来ていません。
![スクリーンショット 2023-07-20 184018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/021d6a47-ed03-9dec-443f-dc84ddfcbb31.png)

DataTableの値もこの通り、最初の空の列と行が正しく取得出来ていなかったため、不要な列と行が入ってしまっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/1c0f2544-5b17-8fef-e32c-e75bea638ee1.png)

原因はセルに余計な書式設定が入ってしまっていたこと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/2dd29fda-ed3d-c4c0-dab0-1aa379b73829.png)

Excelの値を用意したら、念のため必要な範囲の周囲の列と行を削除しておく等の対策が良いかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3069823/749935eb-dece-685d-cf23-ef1ecb85ec73.png)

## おわりに

読んでいただきありがとうございました！
お役に立てれば幸いです。