【PowerAutomate】Apply to eachの使い方。勝手に出てくる原因や遅い時の高速化など!

スポンサーリンク




作業を自動化する

  • プログラミングは分からないけど自動化したい
  • PowerAutomateの使い方がイマイチ分からない
  • Apply to eachを使い方を知りたい

無料ツールでさらにノンプログラミングで自動化ができるならぜひやってみたい!

この記事では、そんな方に向けてApply to eachの使い方を3ステップで説明します。

  • 基本:配列の扱い/Apply to eachの使い方
  • 応用:高速化/ループを抜ける
  • ヒント:勝手にApply to eachになる/繰り返し上限/タイムアウト時間
みずしぶき
みずしぶき

この記事を読めば、Apply to eachが使えるようになります。

まだPowerAutomateを使った事が無いという方はこちらの記事を参考にしてください。

PowerAutomateはブラウザで操作するのでインストール無しで利用できます。Windows10ではないMacユーザも自由に使えます。

私がPowerAutomateの勉強で実際に読んだ本を紹介します。

スポンサーリンク

【基本①】配列の扱い

配列からデータを取り出す方法は2つあります。

  • 要素番号を指定して1つ取り出す
  • Apply to eachで全部取り出す

要素番号を指定して1つ取り出す

Apply to eachを使う前に、配列からデータを取り出す方法を確認します。
知っているという方は読み飛ばしてください。

例えばこんな配列があります。

[
  "あ",
  "い",
  "う",
  "え",
  "お"
]

アクション「変数を初期化する」の値に入力します。

配列のデータを取り出す式はこちら

variables('配列名')?[数字]

後ろに?[数字]を付けると好きな位置のデータを取り出せます。
例えば「う」を取り出す式はこうなります。

variables('ひらがな')?[2]

要素番号は0から始まるので「う」は2です。

  • あ=0
  • い=1
  • う=2
  • え=3
  • お=4

この式を作成の入力に入れてみます。
アクション データ操作の「作成」を作り、式に入力します。

テストでフローを動かすと「う」が表示されました。

名前の付いた配列はコレクション

説明を分かりやすくするために単純な配列を使いましたが、実際のPowerAutomateでは名前の付いた配列(=コレクション)がよく出てきます。

先ほどの配列で「あ」だった部分に「ローマ字:a」「ひらがな:あ」と2つ情報が入っています。これがコレクションです。

[
  {
    "ローマ字": "a",
    "ひらがな": "あ"
  },
  {
    "ローマ字": "i",
    "ひらがな": "い"
  },
  {
    "ローマ字": "u",
    "ひらがな": "う"
  },
  {
    "ローマ字": "e",
    "ひらがな": "え"
  },
  {
    "ローマ字": "o",
    "ひらがな": "お"
  }
]

アクション「変数を初期化する」の値に貼り付けます。

コレクションのデータを取り出す式

variables('コレクション名')?[数字]?['キーの名前']

「う」を取り出す式はこうなります。

variables('文字')?[2]?['ひらがな']

アクション データ操作の「作成」を作り、式に入力します。

今回は例で「あ~お」の配列を使ったので「う」の要素番号が「2」だと分かりましたが、普通は何番目か分かりません。
また、「あ~お」全部取り出したい場合は何度も式を書く必要があります。

ここでApply to eachが登場します。

【基本②】Apply to eachで全部取り出す

配列から全てのデータを取り出す方法を試します。

Apply to eachは2つの手順で使います。

  • 配列を選ぶ
  • 現在のアイテムを選ぶ

この方法は要素番号をしていしないので慣れると簡単になります。
実際に動かしてみましょう。

配列の場合
テスト用の配列(アレイ)を作成します。

この配列は5つデータがあるのでApply to eachでは5回繰り返します。

アクション「Apply to each」を選んで、「配列」を選択、
アクション データ操作の「作成」で「現在のアイテム」を選んだところです。

フローを実行した結果です。
「作成」の1/5に「あ」が入りました。

5回繰り返されて、「あ~お」が出力されました。

1/5 ・・あ
2/5 ・・い
3/5 ・・う
4/5 ・・え
5/5 ・・お

これがApply to eachの動きです。
ちなみに「現在のアイテム」の式はこうなっています。繰り返し回数によって中身が「あ~お」に変化します。

items('Apply_to_each')

コレクションの場合
PowerAutomateでよく使うコレクションでも試してみます。
アクション「変数を初期化する」でコレクションを作成します。

アクション「Apply to each」を選んで、「配列」を選択、
アクション データ操作の「作成」で「現在のアイテム」を選びます。

コレクションだとキーの名前と値がセットになってしまいます。

値だけ取り出したい場合は、「現在のアイテム」の後ろに「キーの名前」を追加して指定します。

items('Apply_to_each')?['ローマ字']

ローマ字だけ取得する為に、場合は「現在のアイテム」を修正します。

フローを動かすと「ローマ字」だけが表示されました。

2つの値を同時に取得したい場合は2つめを入力します。

式が2つ並びました。

フローを動かすと「aあ」のように2つの値が並んで表示されました。

スポンサーリンク

【応用①】高速化する

PowerAutomateの繰り返し処理は一般的なプログラムより遅いです。
ですが、1つの設定で簡単に高速化できます。

これは100回の繰り返しを行った結果です。

  • 高速化無し ・・120秒
  • 高速化有り ・・6秒 20倍!

高速化にはコンカレンシー制御を有効にします。

コンカレンシーとは並行性という意味です。

Apply to eachの設定を開きます。

コンカレンシー制御という項目があります。これをONにして。完了を押します。

これだけで高速化は完了です。

3タイプの繰り返しを試した結果です。

  • コンカレンシー制御無し         ・・120秒
  • コンカレンシー制御有り(並列処理20) ・・10秒
  • コンカレンシー制御有り(並列処理50) ・・6秒

上の例では並列処理50の方が半分の時間で終わっていますが、処理内容によっていは並列20と並列50の差がほとんど無くなる場合もあります。

処理内容によっては高速化の性能もばらつきがでるようです。

【応用②】ループを抜ける

標準機能でApply to eachのループを抜けて次のアクションに移る方法はありませんが、回避策はあります。

回避策:Do Untilに切り替える

Do UntilはApply to eachと同じ繰り返しができます。
Apply to eachは全ての値を処理しなければ終了しませんが、Do Untilの場合は終了条件を自分で設定できます。

Do Untilでループを抜ける方法を試してみます。

[
  "a",
  "b",
  "c",
  "d",
  "e"
]

普通にやるとループは5回です。

ここに値が「c」の場合終了する条件を追加します。

動かすと3つめにある「c」でループが終了しました。

Do Untilは条件を追加すれば途中でループを抜けれる。
Apply to eachの代わりにになるので覚えておきましょう。

スポンサーリンク

【ヒント①】勝手にApply to eachになる原因と回避策

勝手にApply to eachになる原因と回避策はこちら

  • 原因①:動的なコンテンツに配列が含まれている
  • 原因②:JSONが解析されている
    ※アクション「JSONの解析」を実行していなくても、ExcelやSharePointから取得したデータは自動で解析されます。
  • 回避策:要素数を指定する

原因から確認していきます。
例えばここで動的なコンテンツにある「項目」を入れると・・

勝手にApply to eachが出てきます。

「別に繰り返したいわけじゃないのに。」と思うかもしれません
勝手にApply to eachになる原因は2つ

  • 原因①:動的なコンテンツに配列が含まれている
  • 原因②:JSONが解析されている
    ※アクション「JSONの解析」を実行していなくても、ExcelやSharePointから取得したデータは自動で解析されます。

これが揃うと起こります。

みずしぶき
みずしぶき

Apply to eachが勝手に出てくる原因は、動的なコンテンツが配列だったからなんですね。


この動的なコンテンツを見ると[]が付いています。
[]は配列を表しています。

配列のデータは[“あ”,”い”,”う”,”え”,”お”]のように[]の中にカンマ( , )で区切ってデータを複数格納するものです。
例えばデータが1つしかない[“あ”]も[]が付いているので配列になります。これが勝手にApply to eachになる原因です。

ちなみに動的なコンテンツに「本文」がありますが、項目と同じデータです。

回避策:要素数を指定する
配列の1つめのデータだけでいい。と思っている方はこの式で対処できます。

first(配列)

first関数の中に配列の「本文」を指定します。

要素数を指定すればApply to eachは出てきません。
first関数で配列の1つめを指定したので、繰り返す必要が無いからです。

要素番号の指定でも同じ結果になります。

配列?[0}

1つ目のデータを示す[0]を指定していますが、取得したい要素番号が分かっている場合は任意の数字を指定しましょう。

【ヒント②】上限は10万回?

公式によると無償版は5000回、有償版は10万回が上限となっています。

低の場合は 5,000、それ以外の場合は 100,000

この制限は、”Apply to Each” ループが処理できる配列項目の最大数を表します。 

クエリ アクションを使用して、大きい配列をフィルター処理できます。

https://docs.microsoft.com/ja-jp/power-automate/limits-and-config

無償版で実際に試した結果はこうなりました。

Apply to each 10万回
Do Until   5000回
Excel行の取得 10万行

無償版で実際に試してみると10万回も成功しました。

Do Untilは回数制限を5001にするとエラーになるので5000回が上限だとわかります。

Excelはしきい値が10万以下なので上限は10万でした。

公式:PowerAutomateの上限値

ちなみに10万回だとループを回すだけで24分かかりました。

スポンサーリンク

【ヒント③】10分でタイムアウトする理由

フローをテストして10分を超えるとこんなメッセージが表示されます。

公式によると、

10 分を超えて実行されるクラウド フローをテストすると、フローがバックグラウンドで実行され続けても Power Automate にタイムアウト メッセージが表示される場合があります。 この場合は、ビューを再度開いて現在の状態を取得してください。

https://docs.microsoft.com/ja-jp/power-automate/limits-and-config

という事なので、タイムアウトと表示されても実は動いています。
マイフローで見ると「テストの実行中」と表示され時間が[00:28:25]です。

待っていると成功しました。

みずしぶき
みずしぶき

テストで発生するタイムアウトのメッセージは無視しましょう。

まとめ

Apply to eachの使い方を3ステップで説明しました。

  • 基本:配列の扱い/Apply to eachの使い方
  • 応用:高速化/ループを抜ける
  • ヒント:勝手にApply to eachになる/繰り返し上限/タイムアウト時間

ExcelのテーブルやSharePointのリストを扱うと繰り返し処理が増えてきます。初心者の方は基本を読んで繰り返しを試しましょう。慣れてきたら応用やヒントについても目を通して覚えておきましょう。フローが作りやすくなります。

PowerAutomateの記事まとめ
まだ試してないアクションがあれば見ておきましょう。
初心者向け
【初心者向け】PowerAutomateの使い方。無料で誰でも使えます。
基本的なアクション
【PowerAutomate】メールの添付ファイルをOneDriveへ保存する。
【PowerAutomate】Excelのデータをメールで送信する。
【PowerAutomate】メールを受信したらExcelにデータを入力する。
アクションの応用
【PowerAutomate】第1~5○曜日の日付を求める。
【PowerAutomate】メール本文から名前を抽出する。文字列抽出のキホン。
【PowerAutomate】ソートするフローを作る。配列の並べ替え。
【PowerAutomate】SharePointのリストから列と行をフィルターして表にする。
【PowerAutomate】ExcelからSharePointのリストに一括転記する
【PowerAutomate】SharePointのテキストファイルに改行を付けてメール送信
関数・アクション
【PowerAutomate】日付の関数まとめ。月末月初やExcelシリアル値変換など。
【PowerAutomate】Apply to eachの使い方。勝手に出てくる原因や遅い時の高速化など!

今の勉強法に満足していますか?
やりたい事はネットで調べてなんとか対処しているという方が多いと思います。

私も元々はネットから情報を得ていましたが、知識が少な調べる事ばかりで作業が進まなく悩んでいました。一度専門書を買ってみると勉強に集中できネットより遥かに理解が早かったと感じました。

とはいっても何冊も本を買うとお金も場所も取ります。そこでAmazonが提供するKindle Unlimitedという読み放題のサービス。PCやスマホどちらでも使え、月額980円で毎月1~2冊読めば元がとれたので本代の節約になりました。

>>Kindle Unlimitedへ登録する

確かにネットの情報量は多いのでほしい情報は見つかります。でも、ネットで自分の求めている情報を探すのは時間がかかります。気になる事を都度調べるのは効率悪くないですか?

ではどうしたらいいのでしょうか。

それは基礎知識を学ぶ事です。
専門書は初心者向けから上級者向けまでレベル別で出版されているので、求めている内容がそこにありました。

Kindle unlimitedはラインナップが勝手に変わるという予測できない点はありますが、読みたくなった今すぐに読める点が私にはドハマりでした。

初回30日無料なので今すぐに読みたい本がある方はお試しでも利用できます。Kindle Unlimitedは200万冊以上の本が読めるそうです!

ネットの検索時間から解放され、本来の目的に集中しましょう。

\30日間無料/

タイトルとURLをコピーしました