この記事のポイント
- 複数ユーザーが同じフローを同時に実行し、SharePoint上の同じExcelファイルに書き込むと、「後勝ち」で値が上書きされる
- Excel Online (Business) コネクタは、ファイルを一定時間ロックすることがあり、「~が共有するためにロックしています。」エラーでフローが止まる
- 同時実行は、トリガーのコンカレンシー制御をオンにして並列処理の次数を1にすると防げる
- ファイルの取り合いは、SharePointのチェックアウトと、Do Until+遅延でロック解除を待つ処理で防げる
- 転記した値がすぐ反映されない場合は、ファイルを取得する前に待ち時間を入れる
小刀稱 知哉ことね ともや
得意領域
Power PlatformやSharePointを中心に設計・開発・アドバイス・教育まで幅広く担当しています。内製化をご希望の場合はお気軽にお問い合わせください!
保有資格
「~が共有するためにロックしています。」とは、Excelファイルが別のユーザーやフローに使われている間、ほかからの更新ができないように一時的にロックされていることを知らせるエラーです。Power AutomateでSharePoint上のExcelを操作するフローでは、複数ユーザーの同時実行でこのエラーや値の上書きが起こりやすくなります。本記事では、コンカレンシー制御・チェックアウト・待機処理の3つの対策を、実際のフローで紹介します。
Power AppsとPower Automate、SharePointを組み合わせた業務アプリは、使う人が増えるほど同時実行やファイルの取り合いへの配慮が必要になります。既存フローの設計の見直しや、複数人で安心して使える仕組みづくりについて相談したい場合は、以下もご参照ください。
Power Automateは、コーディングの知識がなくともお手軽に業務の自動化を行うことができる非常に有用なツールです。
しかし、誰でも簡単に始めることができるといえど、そこにはお作法が存在します。
お作法を守らずに作成すると、「他の人がメンテナンスできない」や「修正時のコストが大きい」といった問題が発生します。
そこで、Power Automateに関する案件を数多く対応してきた弊社が、現在までに蓄積した「Power Automate作成時のアンチパターン・ベストプラクティス」について紹介します。
本記事を読んでいただくことで、Power Automateを扱う際の「やるべきこと・やってはいけないこと」を知り、より保守性の高いフローを作るコツを掴めるかと思います。
内容としては、既にPower Automateでフローを作成したことがある方に向けた記事です。
また、これからPower Automateを作成したい方も、事前に一読していただくことをお勧めします。
Power Automate初心者の方は、以下の記事も参考にしてください。
第6回目の今回は「Power Automate上でExcelファイルを編集する際の注意点」という内容についてお伝えしていきます。
アンチ・パターン(問題のあるフロー)
まずは、今回の全体概要について説明します。
処理の内容は以下です。
- Power AppsからPower Automateを実行する
(第一引数にログインユーザーの表示名、第二引数にログインユーザーのメールアドレスを格納) - Power Automate上で以下を実行
- SharePoint上に保存したテンプレート用Excelファイルを初期化
- Power Appsから受け取った値をExcelファイルに転記
- SharePoint上の特定フォルダにExcelファイルをコピー
※このPower Appsは複数ユーザーに共有しています。 よって、Power Automateが同時実行される可能性があります。

また、上記を実装したPower Automateは以下です。

Power AutomateでExcelを操作するとどんな問題が起こる?
上記のフローを作成・運用した際、私が今まで経験した問題点を以下に示します。
同じタイミングで実行されると、後から実行された方の値で上書きされる(後勝ち)
「~が共有するためにロックしています。」エラーでフローが異常終了する
「行の更新」で転記した値が、直後の「パスによるファイルコンテンツの取得」に反映されない
- 問題点1: Power Automateが同タイミングで実行されると、後から実行された方の値が優先される
Power Automateが複数ユーザーから同タイミングで実行された場合、後から実行された方の値が優先される事象(いわゆる「後勝ち」状態)が発生しました。 イメージとしては以下です。

- 問題点2: 「~が共有するためにロックしています。」というエラーが発生
Power AutomateからExcelファイルを操作する際、以下エラーが表示されてフローが異常終了する事象が発生しました。

- 問題点3: データの更新が反映されない
「行の更新」アクションにて値を転記した後「パスによるファイルコンテンツの取得」を行っていますが、 転記した最新の値が反映されていない状態が発生しました。
ベスト・プラクティス(修正したフロー)
上記のフローを以下のように修正してみました。

対応した詳細について、それぞれ紹介していきます。
対策1-1:コンカレンシー制御の設定
問題点1が発生した原因としては、以下2点が挙げられます。
– Power Automateが同時実行されること
– Excelファイルに同タイミングアクセスされること
よって、それぞれに対応した対策を実装しました。
まずは、Power Automateが同時実行されることへの対策です。
Power Automateには、コンカレンシー制御という機能があります。 これは1つのPower Automateを同時並行で実行できる数を制御する機能です。
今回は、トリガーアクションのコンカレンシー制御をオンとし、並列処理の次数(=同時並行で実行できるフロー数)を1に設定しました。

※ちなみに、コンカレンシー制御は既定ではオフとなっておりますが、オフの場合、並列処理の次数は無制限(=並列処理される)となっています。 必ずコンカレンシー制御をオンにして、次数を1にするよう設定してください。
上記設定を行うことで、Power Automateが同時実行される数が1つのみとなります。
Microsoft Learnによると、トリガーのコンカレンシー制御をオンにした場合の並列処理の次数は1〜100(既定は25)です。また、同時実行の上限に達している間に待機できる実行の数は「並列処理の次数+10」までで、今回のように次数を1にすると最大11件までとなります。さらに、一度オンにしたコンカレンシー制御は、トリガーを削除して追加し直さない限りオフに戻せません。設定する前に、同時に呼び出される件数の見込みを確認しておきましょう。
対策1-2:チェックアウト機能を活用する
先程の対策は、Power Automate自体の同時実行数を制限する内容でした。 こちらの対策では、チェックアウト機能を用いて、Excelファイルに同タイミングでアクセスされることを防ぐ内容です。
チェックアウト機能とは
本機能は、一言でいうとファイルの排他制御を行うための機能です。
ユーザーAが対象のExcelファイルをチェックアウトすると、ユーザーBは「ユーザーAがチェックアウトの状態を解除するまでExcelファイルを編集できない」という状態にすることができます。
※「チェックアウトの状態を解除する」とは、具体的に言うと、「チェックイン」や「チェックアウトの破棄」のことを指します。
詳細は以下URLをご参照ください。
SharePoint ライブラリのファイルのチェックアウト、チェックイン、または変更内容の破棄を行う
今回は、Excelファイルへの操作(今回は、初期化~ファイルコンテンツを取得)を行う前に、チェックアウトを行いました。
また、操作終了後はチェックアウトの破棄を行っています。
(ちなみに、今回はチェックアウトの破棄を行っておりますが、チェックインでも問題ありません。 特にバージョン履歴に残す必要がないと考えたので、チェックアウトの破棄にて実装しています。)
「共有するためにロックしています」エラーはなぜ起こる?
Microsoft Learnでは、Excel Online (Business) コネクタについて「Excelファイルは、最後にコネクタを使用してから最大6分間、更新または削除のためにロックされている場合がある」と案内されています。フローの実行直後に別のフローやユーザーが同じファイルを更新しようとすると、このロックにぶつかってエラーになります。
対策2:共有ロックが解除されるまで待つ
こちらは定期的にファイルを確認し、ロックが解除されるまで待つように修正しました。
(私の経験上、大体5~15分程度待てばロックが解除されることが多いです。)

修正した箇所は以下です。
「Do Until」アクションを追加し、「ファイルのチェックアウト」を配下に移動
「Do Until」アクションのパラメーターに以下を設定

上記の設定を行うことで、ステータスコードが200(=正常終了)となるまで、「Do Until」アクションを繰り返すようになります。
3. 「遅延」アクションを追加し、「パラメーター」に以下を設定

4. 「遅延」アクションの「設定」に以下値を設定

上記設定を行うことで、ファイルのチェック → チェックでエラーとなった場合、2分間待つ → 再度ファイルのチェック → …というループ処理が行われます。
対策3:データが反映されるまで待つ
問題点3については、どうやらPower Automate上で転記した値はすぐに反映されない場合があるというのが原因のようです。 よって、データが反映されるまで待つという処理を加えました。
※待ち時間については、色々試してみましたが3~5分程度待つことでデータが反映されるようです。
Microsoft Learnでも、Excel Online (Business) コネクタの「行の追加」「行の更新」「行の削除」などで加えた変更は、アクションが成功した直後にはすぐ反映されない場合があり、最大30秒の遅延が想定されると案内されています。公式の目安より長めに待つ必要があったのは、今回のように「行の更新」のあとにファイルそのものをコピーする構成だったためと考えられます。

さいごに
Power Automate上でExcelファイルを操作することは、よくある内容ではないでしょうか。 しかし、複数ユーザーがExcelファイルを操作することなどを考慮する必要があり、案外難易度が高めの実装となります。
今回ご紹介した内容も、とても有用な内容ですので、是非覚えていただければと思います。
今回のポイントをまとめると、次のとおりです。
同時実行による後勝ちは、トリガーのコンカレンシー制御をオンにして並列処理の次数を1にする
ファイルの取り合いは、Excelを操作する前にSharePointでチェックアウトし、終わったらチェックインまたはチェックアウトの破棄をする
「共有するためにロックしています」エラーは、Do Untilと遅延でロックが解除されるまで待つ
転記した値が反映されないときは、ファイルを取得する前に待ち時間を入れる
今回のような「ひとりで試すと動くのに、みんなで使うと失敗する」フローは、運用を始めてから気づくことが多い問題です。Power Automateの設計レビューや、保守しやすいフローを社内で作り続けるための内製化支援に興味がある方は、こちらからサービス内容をご覧いただけます。
【このシリーズの過去回一覧】
-
Power Automateアクション名は変更すべき?メリット・デメリットと設計のポイント
フロー設計ベストプラクティス vol.1 -
Power Automateで変数を使って類似アクションを共通化する方法
フロー設計ベストプラクティス vol.2 -
Power Automateのトリガー動的コンテンツをそのまま使うのがNGな理由と正しい対処法
フロー設計ベストプラクティス vol.3 -
Power Automateでアクションの入れ子(ネスト)が危険な理由と回避策
フロー設計ベストプラクティス vol.4 -
Power AutomateのApply to eachで並列処理(コンカレンシー)時に変数がNGな理由と回避策
フロー設計ベストプラクティス vol.5 -
Power AutomateでExcelを操作するときの注意点:「共有するためにロックしています」エラーと同時実行の対策
フロー設計ベストプラクティス vol.6 -
Power Automateのエラー通知:失敗時に管理者へすぐ通知するスコープと終了アクションの設定方法
フロー設計ベストプラクティス vol.7
