Power AutomateでSharePointリストを更新するフローを作成していると、意図した通りに更新されない、あるいはエラーが発生するといった問題に直面することがあります。多くの場合、原因は入力値のデータ型や条件分岐の設定にあります。この記事では、SharePointリストの更新がうまくいかないときの原因特定から修正手順までを具体的に解説します。フローが期待通り動作しないときに、どこを確認すればよいのか、どのように直せばよいのかを、実務の視点から整理しました。
【要点】この記事で確認すること
- 最初に見る場所: フローの実行履歴でエラーメッセージや失敗したアクションを確認します。特に「SharePointの更新」アクションの出力を詳しく見てください。
- 切り分けの軸: 端末側の問題か、アカウントの権限か、それともフローのアクション設定自体の問題かを分けます。アクションの入力値が想定通りか、条件分岐が正しいかを順に検証します。
- 注意点: 会社PCではSharePointの列の種類や設定を勝手に変更できない場合があります。列のデータ型やインデックスの変更が必要なときは、SharePoint管理者に依頼してください。
ADVERTISEMENT
目次
更新アクションが実行されない原因と確認ポイント
まずはフローがそもそも更新アクションまで到達しているかを確認します。Power Automateの実行履歴を開き、該当の実行を選んで各アクションの状態(成功・失敗・スキップ)を確認してください。
更新アクションがスキップされている場合は、その前にある条件分岐(Condition)やトリガーの設定が原因です。条件式が正しく評価されていないか、トリガーが期待するアイテムを正しく受け取っていない可能性があります。
また、更新アクションが失敗している場合は、エラーメッセージを確認します。よくあるエラーは「列が見つからない」「許可されていない操作」「指定された値が無効」などです。これらのメッセージから、入力値や権限の問題を特定できます。
実行履歴の見方とエラーメッセージの読み解き方
フローの実行履歴はPower Automateポータルの「実行」タブから確認できます。各アクションの出力を展開し、入力値やエラーの詳細を確認してください。
例えば「{ “status”: 400, “message”: “The property ‘Title’ does not exist on type ‘SP.Data.TestListItem'” }」のようなエラーが出た場合、フローで指定した列名がリストの実際の列名と一致していません。内部名(Titleの場合はOData__Title)を使う必要があるケースもあります。
エラーが「Access denied」の場合は、フローを実行しているアカウント(通常は所有者または自分)にリストの編集権限があるか確認してください。特に会社のSharePointサイトでは、セキュリティグループによる制限がかかっていることがあります。
入力値のデータ型が一致していないケース
SharePointリストの列にはそれぞれデータ型(テキスト、数値、日付、Yes/No、ユーザー、参照など)が設定されています。Power Automateから更新する際には、その列のデータ型に合った値を渡さなければなりません。
例えば、数値型の列に文字列を渡すと更新に失敗します。日付列にはISO 8601形式(例:2025-02-15T00:00:00Z)の文字列、ユーザー列にはユーザーのメールアドレスまたはUPN(ユーザープリンシパル名)が必要です。参照列の場合は、参照先リストのアイテムIDを指定します。
データ型の変換が必要なパターン
以下の表は、よく遭遇するデータ型の不一致パターンと修正方法の比較です。
| SharePoint列の型 | 失敗する入力例 | 正しい入力例 | Power Automateでの変換方法 |
|---|---|---|---|
| 数値(通貨も含む) | “123”(文字列) | 123(数値) | int() 関数または float() 関数を使う |
| 日付 | “2025/2/15” | “2025-02-15T00:00:00Z” | formatDateTime() 関数で変換 |
| ユーザー | “山田太郎”(表示名) | “yamada@contoso.com” | ユーザープロファイルアクションでメールを取得する |
| 参照(ルックアップ) | “アイテム名” | 123(数値ID) | 参照先リストからIDを取得して動的に設定 |
| Yes/No(ブール) | “はい” | true または false | bool() 関数を使うか、条件式で true/false を指定 |
このように、データ型の不一致は非常に多い原因です。フローで値をセットする前に、式エディタで適切な関数を使って変換してください。なお、Power Automateのデザイナー上では、入力値の型が合わないと自動で警告が出ることもありますが、出ない場合も多いので自力で確認する必要があります。
条件分岐の設定ミスによる更新漏れ
更新アクションを条件分岐(Condition)やスイッチの内部に配置している場合、その条件式が正しく評価されないと、更新アクションが実行されません。
典型的なミスは、「等しい(equal to)」を使うべきところで「含まれる(contains)」を使ってしまう、または文字列と数値を比較している、といったケースです。SharePointから取得した値は、単一選択の選択肢列(Choice)では文字列として扱われますが、数値列では自動的に数値になります。比較の際は、両辺のデータ型をそろえる必要があります。
条件式のデバッグ手順
条件式が正しいかどうかを確認するには、条件の直前に「Compose」アクションを挿入して、比較する値を出力してみてください。これにより、実際にどのような値が条件に渡されているかがわかります。
- フローを編集モードで開きます。
- 条件アクションの直前に「Compose」アクションを追加します。
- Composeの入力に、条件で使っている左辺と右辺の値をそれぞれ動的なコンテンツまたは式で指定します。
- フローを保存してテスト実行します。
- 実行履歴からComposeの出力を確認し、想定通りかどうかをチェックします。
- もし値が期待と異なる場合、その値を修正するか、条件式を調整します。
- 確認が終わったら、不要になったComposeアクションは削除します。
この手順で、条件が正しく評価されない原因を特定できます。例えば、日付の比較をする場合、formatDateTimeで統一しないと期待通りの結果にならないケースがあります。
よくある失敗パターンと対処例
実際の現場でよく発生する失敗パターンをいくつか紹介します。
パターン1:フローのトリガーがアイテム作成時になっているのに、更新アクションがアイテムIDを正しく取得できていない
例えば、作成されたアイテムのIDを動的コンテンツから取得しようとして、別のリストのIDを参照してしまっている場合です。トリガー出力の「ID」は、トリガーが発生したアイテムのIDです。それを更新アクションの「アイテム識別子」に正しく設定してください。
また、ループ内でアイテムを更新する場合、ループごとに異なるアイテムIDを使う必要があります。間違って固定値のIDを指定していないか確認してください。
パターン2:列の内部名と表示名の違いによる更新失敗
SharePointリストの列には内部名(Internal Name)があります。Power Automateの動的コンテンツでは表示名で表示されますが、APIに送る際には内部名が使われます。特に列名にスペースや特殊文字が含まれている場合、表示名と内部名が異なることがあります。動的コンテンツで列を選ぶときは必ず正しい列を選び、式エディタで「item()?[‘OData__x0020_InternalName’]」のような形式になっているか確認してください。
パターン3:複数行テキスト(リッチテキスト)の更新でHTMLタグが不正になる
リッチテキスト列に値を更新するときは、HTML形式で渡す必要があります。しかし、動的コンテンツに含まれる改行や特殊文字が正しくエスケープされず、エラーになることがあります。この場合は、replace関数やencodeUriComponentを使って事前に文字列を整形してください。
管理者への確認依頼が必要なケース
以下のようなケースでは、自分で設定を変更する前にSharePoint管理者またはPower Platform管理者へ確認と依頼をしてください。
- 列のデータ型を変更する必要がある場合(例:テキストから数値に変更)
- リストにインデックスを追加してパフォーマンスを改善したい場合
- リストの権限設定が原因でフローが更新できない場合(フローにリスト編集権限が必要)
- カスタムフォームやバリデーション設定が更新を阻害している場合
- SharePoint Designerのワークフローと競合している可能性がある場合
管理者に依頼する際は、具体的なエラーメッセージのスクリーンショットや、フローの実行履歴IDを添付するとスムーズです。Power Automateの「共有」機能を使ってフローそのものを見てもらうことも有効です。
よくある質問(FAQ)
Q: 更新アクションで「アクセスが拒否されました」と出ます。どうすればいいですか?
A: フローを実行するアカウントにリストの編集権限があるか確認してください。フローは通常、作成者の権限で実行されますが、共有フローの場合は接続参照で別のアカウントを指定している可能性があります。SharePointサイトの権限設定を確認し、必要であればリストへの「編集」権限を付与してもらいましょう。
Q: 条件分岐で「true」になるべきなのに「false」になっています。なぜですか?
A: 多くの場合、比較している値のデータ型が一致していないか、空白(null)が混ざっていることが原因です。Composeアクションで実際の値を確認してください。また、文字列と数値の比較では「equal」が使えないことがあるので、int()やstring()で型を揃えてください。
Q: 更新されるアイテムが毎回変わってしまうのはなぜですか?
A: おそらく「アイテム識別子」の指定が動的ではなく、固定値になっているか、ループ内で参照するIDが更新されていません。各アイテムを一意に特定できる値(IDやGUID)を動的に設定してください。ループ内では「現在のアイテム」のIDを使う必要があります。
Q: 日付列の更新で「無効な値」エラーが出ます。原因は?
A: 日付列はISO 8601形式の文字列(例: 2025-02-15T00:00:00Z)でなければ受け付けません。Power Automateの式エディタでformatDateTime(utcNow(), ‘yyyy-MM-ddTHH:mm:ssZ’)のように変換してください。また、時刻部分を省略するとエラーになるため、必ず時刻まで含めてください。
まとめ
SharePointリストの更新がうまくいかないときは、まず実行履歴でエラー内容を確認し、更新アクションまで到達しているかを見極めてください。次に、入力値のデータ型がSharePointの列定義と一致しているか、条件分岐の式が正しく評価されているかを順にチェックします。多くのトラブルはこれらのいずれかに当てはまります。どうしても解決しない場合は、管理者に権限や列定義の確認を依頼しましょう。本記事で紹介した確認手順と対処法を実践すれば、フローの正常動作に近づくはずです。
ADVERTISEMENT
超解決 リモートワーク研究班
Microsoft 365の導入・保守を専門とするエンジニアグループ。通信障害やサインイン不具合など、ビジネスインフラのトラブル対応に精通しています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
- 【Teams】画面共有時に「音声」も共有する方法!音が流れない時の設定手順
