前回までに、PowerAutomateで請求書の作成を自動化する方法の1つとして、テンプレートファイルとデータファイルの2つに分けて考える方法を紹介した。前回はデータファイルから会社情報などコピーして自動入力させたが、今回はデータファイルから請求金額のデータを取り出す処理を紹介する。

自動化したい処理を確認

前回のフローをコピーして「請求書作成 その4」を作成する。

  • フロー「請求書作成 その4」

    フロー「請求書作成 その4」

今回のフローで行う処理を確認しよう。まず、次のデータファイルから該当する請求項目を見つける。今回のケースであれば次のスクリーンショットの赤枠で囲ったデータを抜き出してみよう。

  • 今回抜き出したいデータ

    今回抜き出したいデータ

抜き出すデータは1列目の「請求対象年月」に一致するかどうかで判断する。今回のケースで言えば2023年11月のデータが欲しいので、1列目のデータが「202311」になっている行の2列目と3列目のデータを参照する。

そして、次のスクリーンショットのようにテンプレートファイルの請求項目に抜き出した値を自動入力させていく。

  • 請求書テンプレートに請求項目と金額を自動入力させたい

    請求書テンプレートに請求項目と金額を自動入力させたい

これを実現するには、「繰り返し」と「条件分岐」というプログラミング的な処理をする必要がある。Power Automateで実用的なフローを作る良いサンプルだ。

データファイルから請求データを抜き出すフローを作る

請求書は、取引先によって先月のものや来月のものなど対象月が異なることが多い。処理の途中でどの月に対する請求書を作成するのかを指定できるようにしておきたい。

しかし、Power Automateには日付を選択するためのダイアログは用意されているが、年月を選択するためのダイアログは用意されていない。そこで、テキストを入力するアクション「入力ダイアログを表示」で代替する。毎回入力するのは手間なので、デフォルトで当年月が表示されるようにしておこう。まずは、次のように現在日時のデータから年月のテキストを生成する。

  • 「datetimeをテキストに変換」で現在年月のテキストを生成

    「datetimeをテキストに変換」で現在年月のテキストを生成

生成した変数「%FormattedDataTime3%」を指定して、年月を入力するためのダイアログを表示させる。

  • 「入力ダイアログを表示」で年月を指定できるようにする

    「入力ダイアログを表示」で年月を指定できるようにする

データファイルからデータを読み込む必要があるので、行数をベースにデータを見ていく。先に示したファイルでは13行目からデータが入っているので、次のように行を示す「%NumberOfRow%」という変数を用意し、その値を13に設定しておこう。

  • 行数を保持する変数を準備し、最初の行を設定しておく

    行数を保持する変数を準備し、最初の行を設定しておく

データを下の行へ向かってチェックしたいので、とりあえず10,000行まで参照するようにループを作成する。

  • 13行目から10、000行目まで繰り返すループ

    13行目から10,000行目まで繰り返すループ

ループの中では「行の値を読み取って表示する」という処理を行う。「Excelワークシートから読み取る」を使って次のように対象セルのデータを読み取る。

  • 「Excelワークシートから読み取る」で対象セルのデータを読み取る

    「Excelワークシートから読み取る」で対象セルのデータを読み取る

動作確認をしながら作っていくとわかりやすいので、ここで読み取ったデータをメッセージダイアログで確認できるようにしておく。

  • 「メッセージを表示」で読み取ったデータを表示させて確認する

    「メッセージを表示」で読み取ったデータを表示させて確認する

本当に10,000行まで処理を繰り返しても意味がないので、読み込んだセルの値が空だったらループを抜けるようにする。「If」というアクションを次のように追加し、対象となる変数が「空である」かどうかを演算子として設定する。

  • 「If」で読み取ったデータが空かどうかを判断する

    「If」で読み取ったデータが空かどうかを判断する

そして「If」の中に「ループを抜ける」というアクションを追加する。

  • 「If」の中に「ループを抜ける」アクションを追加する

    「If」の中に「ループを抜ける」アクションを追加する

これでデータが入力されていない行がに到達したらループ処理から抜ける。ループ終了方法の一つとして覚えておこう。

「If」の処理が終わったら、行数を指す「%NumberOfRow%」の値を「変数を大きくする」で1つ加算する。加算しないと次の処理に進まないので、この処理は忘れないようにしよう。なお、今回のケースでは、ループで自動生成される%LoopIndex%を使うことで自分で加算する手間を省くという方法もある。

  • 「変数を大きくする」で%NumberOfRow%の値を1つ加算

    「変数を大きくする」で%NumberOfRow%の値を1つ加算

ここまでの処理をフローで見ると次のようになる。

  • 追加した処理の流れ(特にロープとIfのあたり)

    追加した処理の流れ(特にロープとIfのあたり)

処理が「Loop」で回りながら、「If」アクションでループの終了判定を行っていることがわかる。

動作を確認する

ここまでのフローを実行する。処理が走った後で、次のようにデータファイルから読み出したセルのデータが表示される。この部分の処理はループの中なので、繰り返し実行される。

  • セルから読みだしたデータが表示される

    セルから読みだしたデータが表示される

「OK」ボタンを押していくと次々に値が表示されていく。次のスクリーンショットが最後のデータが表示された部分だ。

  • セルから最後のデータを読みだしたところ

    セルから最後のデータを読みだしたところ

ここで「OK」を押すと、さらに次のようなダイアログが表示される。何もデータが書き込まれていないので、空のまま表示されている。

  • 取り出したデータが空なので、ダイアログも空のまま表示されている

    取り出したデータが空なので、ダイアログも空のまま表示されている

ここで「OK」を押すと処理は完了だ。

対象年月の請求データのみを取り出すようにフローを書き換える

さらに動作を作り込んでいく。請求データが取り出せることはわかったので、次の対象年月の請求データのみを取り出す条件を追加する。条件は「If」アクションで次のように設定しよう。

  • 対象年月のデータだけを取り出すように「If」で条件を追加

    対象年月のデータだけを取り出すように「If」で条件を追加

「If」の条件に一致した場合に、その行の2列目と3列目のデータを取り出せるように「Excelワークシートから読み取る」アクションを追加する。

  • 「Excelワークシートから読み取る」で対象行の2列目のデータを取り出す

    「Excelワークシートから読み取る」で対象行の2列目のデータを取り出す

  • 「Excelワークシートから読み取る」で対象行の3列目のデータを取り出す

    「Excelワークシートから読み取る」で対象行の3列目のデータを取り出す

取り出したデータを確認したいので、「メッセージを表示」アクションで表示させる。

  • 「メッセージを表示」で取り出したデータを確認する

    「メッセージを表示」で取り出したデータを確認する

ここまでで、該当部分のフローは次のようになっている。

  • 書き換えた部分のフロー

    書き換えた部分のフロー

「対象年月だった場合にデータを取り出して表示する」という処理が書かれていることがわかる。

実行して動作を確認

ここまでのフローを実行して動作を確認してみよう。実行すると次のようにデータファイルを選択するためのダイアログが表示される。

  • データファイルを選択するダイアログ

    データファイルを選択するダイアログ

ファイルを選択すると次のようにMicrosoft Excelが対象データファイルをオープンする。

  • Microsoft Excelが対象データファイルをオープン

    Microsoft Excelが対象データファイルをオープン

そして、どの年月のデータから請求書を作成するかを指定するためのダイアログが起動する。

  • どの年月の請求データを取得するかを指定

    どの年月の請求データを取得するかを指定

そして次のように2つの請求データが表示される。

  • 対象年月の請求データその1

    対象年月の請求データその1

  • 対象年月の請求データその2

    対象年月の請求データその2

欲しかったデータが取得できた。

繰り返し(ループ)と条件分岐(If)で汎用化

今回のフローのようにループで処理を繰り返し、条件分岐(If)で状況に応じて処理を変えるというのはPower Automateで実用的なフローを組む場合に基本となる制御方法の一つだ。

Power Automateでは、複雑な条件フローを組み立てるよりも、シンプルな状態にキープするのがオススメではある。しかし、今回のようにプログラミング的な設定ができることは覚えておいていただきたい。

必要なデータを取り出せたので、次はこのデータを入力していけばよい。行う処理は今回の処理の逆だ。ループで繰り返し処理を行いながら、請求書にデータをはめ込んでいく。