PowerAutomate

【Power Automate入門】Excelデータを取得し、SharePointリストに転記する方法~ループと条件分岐を使いこなす!~

ミムチ

Excelにあるテーブルデータを、SharePointリストに転記したいのですが、Power Automateの実装が上手くできませんぞ…

パワ実

それを実現するフローの実装には、ループや条件分岐、フィルタークエリ等の理解が重要です。

この記事では、Power Automateで、ExcelからSharePointリストに転記するフローの実装を解説しながら、ループ処理や、条件分岐の実践的な使い方を学びます!

この記事でわかること
  1. ExcelからSharePointリストにデータを転記させる方法
  2. ループや条件分岐の使い方
  3. フィルタークエリの具体的な使い方

Youtube動画で見たい方は、こちらからどうぞ!

ExcelからSharePointリストに転記するフローの全体像

自動化する業務フローの例

今回は、以下のような業務フローの自動化を想定します。

業務フローの例
  1. 社内で使う案件管理システムから、RPAで毎日Excelでデータを出力する(自動化済)
  2. ExcelをSharePointリストに転記する ←今回自動化する部分

今回は、ExcelからSharePointリストへの転記を、Power Automateで自動化していきます。

注意点として、ExcelとSharePointリストには、同じProjectIDの行が存在する場合があります。

例えば以下の図のように、ProjectID 6、7はExcelには存在しますが、SharePointリストには存在しません。

そのためProjectID 6、7は、SharePointリストに新規追加します。

一方ProjectID 5は、ExcelにもSharePointリストにも存在しますが、Excelではステータスが受注済に変わっています。

そのためSharePointリストのProjectID 5は、データを更新するようにします。

ミムチ

今回の業務の自動化は、どのようにPower Automateフローの流れを組み立てればよいのですかな?

Power Automateフローの全体像

例えば以下のようなフローが考えられます。

Power Automateフローの流れ
  1. トリガーとして毎日1回(朝10時など)に開始する
  2. システムで出力されたExcelのデータを取得する
  3. ②で取得したデータ(アレイ型)をFor Each(それぞれに適用する)というループのアクションで、1件ずつ処理する
  4. ループでは、アレイのデータ、今回の場合Excelデータを1件ずつ処理することができます。
  5. ループ処理の中で、前のアクションで取得したExcelのProjectIDと一致するSharePointリストのデータを取得する
  6. 条件分岐で前のアクションで、ProjectIDが一致するSharePointリストのデータが取得できたかを判定する
  7. 判定の結果、データが取得できた場合(同じProjectIDのデータがすでにある場合)はリストを更新、ない場合はリストに新規登録をする
  8. ⑤~⑦の処理をExcelの行数分ループで実行したら、フローは終了

これがPower Automateフロー全体の流れになります。

パワ実

それでは実際にPower Automateフローを実装していきましょう!

Power Automateフローの具体的な実装方法

データの準備(ExcelとSharePointリスト)

転記先のSharePointリストは、以下のようなものを用意しています。

転記元のExcelテーブルは、以下のようなものを用意しました。

ミムチ

SharePointリストとの差分としては、ProjecIDの6と7が新規に追加されたことと、ProjectID 5のStatus列が更新されていることですな!

1.Power Automate画面を開き、作成からスケジュール済みクラウドフローを選択し、繰り返し間隔を1日にして作成します。

これがフローのトリガーとなります。

Excelからデータ取得する方法

1.次に「Excel」の「表内に存在する行一覧表示」アクションを追加し、Excelテーブルデータを取得します。

Excelのデータを取得する際は、必ずExcelを「テーブルフォーマット」にする必要があります。

2.「詳細パラメーター」>「DateTime形式」は、ISO8601に設定します。
※デフォルトではシアルナンバーとなっています。

条件を指定して、例えばフラグ列が0となっているデータのみを取得する際は、フィルタークエリーを使うこともできます。

3.ここまでで一旦保存してテストしてみます。

「表内に存在する行を一覧表示」を選択し、「未加工出力の表示」をクリックしましょう。

4.Power AutomateでExcelデータを取得した際は、以下のようなオブジェクトのアレイ型として、出力データが得られます。

BodyのValueの中に、Excel1行が、{}内に、オブジェクト(JSON形式)で取得され、それが複数行分、アレイ型となって出力されます。

すなわちオブジェクトのアレイ型となって取得されるため、次にExcelを1行ずつ処理するために、For Each(ループ処理)が必要となります。

ループ(For Each)とは?

For Each(ループ)処理はアレイ型のデータを1つずつ取り出して処理することができます。

前のアクションで取得したExcelデータの行数分ループ処理を行い、一件ずつループ内のアクションで処理していきます。

ミムチ

例えばExcelデータが5行分取得されたら、5回ループ処理が回るというわけですな!

ループの詳しい解説については、以下の記事も参考にしてください。

【PowerAutomate入門】Apply to eachとは?~アレイ(配列)を1つずつ処理する方法~ この記事では、Power Automateの「コントロール」アクションの一つ「Apply to each」の使い方を解説します。...

1.Power Automateの編集画面に戻り、「コントロール」の「それぞれに適用する」アクションを追加します。

2.ループさせるデータは、動的なコンテンツから、前のアクション(Excelの表内に存在する行一覧表示)の「Body/Value」を設定します。

このBody/Valueは、テスト実行した際の、Excelの表内に存在する行一覧表示の出力で確認したオブジェクトのアレイ型となっているデータです。

フィルタークエリとは?

1.次にSharePointの「複数項目の取得アクション」を使って、SharePointリストのデータを取得します。

この時1つ1つのExcel行のデータで取得されたProjectIDの値と一致するSharePointリストのデータを取得します。

このような時フィルタークエリというものを使って、条件に当てはまるデータのみを取得することができます。

2.詳細パラメータから、フィルタークエリに以下のように設定します。

3.また、上から順に取得を1に設定します。

今回の場合、Excelで取得したProjectIDと一致するSharePointリストのデータを取得します。

すでに同じProjectIDのデータがある場合は1件取得され、同じProjectIDのデータがない場合は0件となります。

フィルタークエリーの書き方の基本は、以下のようになります。

今回の場合SharePointリストのProjectID列が、Excelで取得されたProjectIDの値と一致するものを取得するため、以下のように書きます。

ProjectID eq @{items(‘それぞれに適用する’)?[‘ProjectID’]}

ミムチ

今回は1行だけ取得できれば良いのに、なぜ項目の取得の方を使わないのですかな?

パワ実

項目の取得の場合、SharePointリストのIDを指定する必要があります。

今回は、ProjectID列でフィルタークエリを使いたいため、複数項目の取得のアクションを使います。

4.ここまでで一旦保存して、テストしてみましょう。

複数の項目の取得の結果を見ると、最初の1~5まではすでにSharePointリストにデータがあるため、出力のValueで一件のデータが取得されています。

一方ループの6回目と、7回目は、SharePointリストにデータがないため、出力のValueでは何もデータが取得されていないということが分かります。

このような感じで、フィルタークエリーを使ったSharePointリストデータの取得ができました。

条件分岐とは?

最後に条件アクションで、前のアクションのデータが取得できたかを判定し、後続のアクションでSharePointリストへの新規データ登録か、データ更新かのアクションに分岐します。

条件分岐を使うと、条件に一致するかどうかで後続のアクションを分けることができます。

今回は前のアクションでExcelで取得されたProjectIDと一致するSharePointリストのデータが取得されたかを判定します。

つまり条件分岐では、前のアクションでSharePointリストのデータ取得の結果が空かどうかを判定します。

条件分岐の詳細については、以下の記事もご参考ください。

【PowerAutomate入門】条件に応じて処理を変える方法~条件分岐~ この記事では、Power Automateで条件に応じて処理を変える、条件分岐の方法について解説します。 例えばメール受信...

1.複数項目の取得の後に、コントロールの「条件」アクションを追加します。

条件の内容は前のアクションでSharePointリストのデータが取得できたかどうかです。

2.左側には関数式(fx)から、以下のEmpty関数式を入力し、追加ボタンをクリックします。

empty(outputs(‘複数の項目の取得’)?[‘body/value’])

※Empty関数の中に、動的なコンテンツから、前のアクション「複数項目の取得」のBody/Valueを選択します。

3.比較演算子は「is Equal to」、比較する値はTrueです。

パワ実

複数項目の取得でデータが取得されなかった場合、つまり既存のProjectIDのデータがない場合、Empty関数式の結果はTrueとなり、条件の判定結果もTrueとなります。

4.Trueの方には、SharePointリストの「項目の作成」アクションを追加します。

5.Falseの方には「項目の更新」を追加し、それぞれ対象のリストを選択し、動的なコンテンツから、Excelの各列のデータを設定していきます。

6.「項目の作成」は、以下のように設定します。

ProjectIDは、Excelからは文字列で取得されますが、SharePointリストは数値型なので、関数式の入力でInt関数を使います。

Int(items(‘それぞれに適用する’)?[‘ProjectID’])

※Int関数式の中に、動的なコンテンツでExcelのProjectIDを入れると、ProjectIDの値が文字列型から数値型に変換されます

7.「項目の更新」の方も、以下のように設定します。

この時、複数項目の取得の結果が1レコードだけであっても、アレイ型のデータとして出力されるため、For Eachに入りますが、あまり気にしなくても大丈夫です。

8.しかし、For Eachを使わないようにしたい場合、以下の関数式を使って設定します。

first(outputs(‘複数の項目の取得’)?[‘body/value’])?[‘ID’]

9.フローが完成したので、テスト実行してみると、Excelのデータが、SharePointリストに反映されます。

フローの実行履歴をみると、ProjectID 1~5(ループの5/7まで)は、既にSharePointリストにデータが存在しているので、項目の更新の方が実行されます。

一方、ProjectID6と7(ループの6/7以降)では、複数項目の取得でデータが取得されないので、条件分岐はTrueとなり、項目の作成の方が実行されます。

パワ実

今回のフローの実装ではループや、条件フィルタークエリと重要な概念がたくさん入っているので、是非学習に役立ててください!

最後に

この記事では、Power Automateで、ExcelからSharePointリストに転記するフローの実装を解説しながら、ループ処理や、条件分岐の実践的な使い方を学びました。

ExcelやSharePointリストで複数のレコードを取得する時、フィルタークエリを使えば、条件に数レコードのみを取得できます。

またループ、条件分岐は、Power Automateを実装する上での基礎知識となるため、是非使い方を覚えておきましょう!

ABOUT ME
パワ実
DX推進担当(IT部門) 2021年からPower Platform(Power BI、Power Apps、Power Automate)を勉強中。 Power Platformを使っていく中で、知りえた情報を発信している。 Youtube、Twitterでの情報発信もしています!

Power Platformのご依頼・ご相談について

Power Platformについてのご相談、お仕事のご依頼については、
こちらのお問い合わせページをご確認ください。