Formsに回答があったら、Excelの出欠表で「その人の、その日」のセルに丸を付けたい。Power Automateで「行の更新」を置いてみると、行を探す条件を入れる「キー列」の欄が1つしか無い。メールアドレスだけでは同じ人の別の日の行に当たってしまうし、日付だけでは別の人の行に当たってしまう。どうにか動かしてみたら、今度は前に入っていた内容が消えていた。
「行の更新」は、1つの列の値で行を探し、最初に見つかった1行を書き換えるアクションです。 だから、2つの条件で行を特定したいなら、Excel側に「2つの値をつないだ列」を1本作り、Power Automate側でも同じ文字列を組み立てて、その列をキーにします。前の内容を残したまま書き足したいなら、先に「行の取得」で今の値を読み、足してから書き戻します。うまくいかないときの原因の多くは、この2つの仕組みと、キーの文字列の小さなずれにあります。
この記事では、「行の更新」が何をしているのかを押さえたうえで、よくある4つの症状を原因から順に見ていきます。
この記事は、無料動画「Power AutomateでExcelの既存行を更新する」とメンバー限定動画「2つの列をキーにしてExcelファイルの行を更新する」を素材に、2026年10月21日時点のMicrosoft Learnの説明で仕様を確かめて書きました。動画は2021〜2022年の収録で、Power Automateの画面は今と違います。アクションの名前と考え方は変わっていません。
「行の更新」は何をしているのか
使っているのは、Excel Online (Business) コネクタの「行の更新」です。Microsoft Learnの「Excel オンライン (ビジネス)」は、このアクションを「キー列を使用して行を更新します」と説明し、入力欄として、ファイルの場所、ファイル、テーブル、キー列、キー値、更新する列の値を並べています。
| 入力欄 | 入れるもの | 例 |
|---|---|---|
| テーブル | 更新したい表(Excelの「テーブル」) | 回答表 |
| キー列 | 行を探すときに見る1つの列 | メールアドレス |
| キー値 | その列の中で探す値 | [email protected] |
| 各列の値 | 見つかった行に書き込む値 | 回答の列に ○ |
同じページは、キー列とキー値の考え方を表で示し、2行目を更新したいなら「キー列は列1、キー値は200」というように、1つの列の1つの値で行を指す例を載せています。動作で押さえておきたいのは次の3つです。
- 入力欄の「テーブル」は、ドロップダウンからテーブルを選ぶ形です。ただのセル範囲は選べません。 表を作ったら、Excelで「テーブルとして書式設定」をしておきます
- 同じキー値の行が複数あると、最初の行だけが更新されます
- 入力した値で指定したセルが上書きされ、空のまま送った列は更新されません
テーブルにする手順は、無料動画「Power Automateでカスタマイズ可能な一斉配信メールを作る」の3分52秒からで、範囲を選んで「テーブルとして書式設定」をし、テーブル名を分かりやすい名前に変えるところまで画面で見られます。テーブル名を「テーブル1」のままにしておくと、フローの側でどの表を選んだのか分からなくなります。
ファイルの場所の欄で迷ったら、そのExcelがどこに置かれているかを先に確かめてください。Teamsのチャネルで共有したファイルはSharePointのサイトに、チャットで送ったファイルは送った人のOneDriveに置かれています。この置き場所の違いは「Teamsの「ファイル」はTeamsの中に無い」にまとめました。
無料動画では5分38秒から、メールの件名をキー値にして、既存のExcelファイルとテーブルを指定し、キー列に「タイトル」を選んで該当の行を更新する設定を見られます。
症状1:キー列が1つしか選べない(2つの条件で行を特定したい)
冒頭の出欠表のように、「メールアドレス」と「日付」の2つがそろって初めて1行に決まる表は珍しくありません。ところが、「行の更新」にも「行の取得」にも、キー列とキー値は1組しかありません。メンバー限定動画では4分12秒から、まさにこの「列が1個しか選べないから、2つの条件ではうまくいかない」というところで質問者がつまずいていた、と話しています。
解決の考え方は、2つの値を1つの文字列にしてしまうことです。
- Excelのテーブルに「検索用」の列を足し、2つの列をつないだ値を数式で入れる
- Power Automateでも、同じ規則で同じ文字列を組み立てる
- 「行の更新」のキー列に「検索用」を選び、キー値に2で組み立てた文字列を入れる
Excel側の数式は、たとえば次のようになります(列名は自分の表に合わせてください)。
=[@メールアドレス] & "|" & TEXT([@日付], "yyyy-mm-dd")
Power Automate側では、変数の初期化か「作成」アクションで、同じ形の文字列を作ります。
concat(<メールアドレス>, '|', formatDateTime(<日付>, 'yyyy-MM-dd'))
2つの値の間に | のような区切りを挟んでいるのは、つないだ結果が別の組み合わせと同じ文字列になるのを防ぐためです。区切りが無いと、「a1」と「23」をつないだ値と、「a12」と「3」をつないだ値は、どちらも「a123」になります。メールアドレスと日付の組み合わせならまず起きませんが、番号どうしをつなぐ表では起こり得ます。
メンバー限定動画では、この「検索用の列を作ってしまえばいい」という発想を、実際の出欠表で組み立てています。
- 5分46秒から:Excelに検索用の列を足し、TEXT関数で日付を「年-月-日」の文字列にしてメールアドレスとつなぐところ
- 7分47秒から:同じ文字列をPower Automateの式で作るところ
- 8分46秒から:検索用の列をキー列にして行を更新し、該当するセルに丸が付くところ
どの列をつなげば1行に決まるのかは、表ごとに違います。記事では考え方までにして、出欠表を例に数式と式が同じ文字列になるところまで通しで見たい場合は、動画のほうが速いです。
検索用の列は、人が見る表には要らない列です。動画では10分35秒から、見た目が気になるなら列を非表示にする、別の表にIDを持たせる、といった整え方にも触れています。
症状2:キーは合っているはずなのに、行が見つからない
キー値は文字列として突き合わせます。1文字でも違えば別の値です。見た目は同じでも、次のようなずれがよく起きます。
日付の書式で、月と分を取り違える
Excelの「TEXT 関数」のヘルプは、mm を単独で使うと月を返し、時間と組み合わせたときだけ分になる、と説明しています。Excelでは yyyy-mm-dd と書いて月が出ます。
Power Automateの式は違います。Microsoft Learnの「ワークフローの式における関数の参照」によると、formatDateTime の書式は書式指定子やカスタム書式指定パターンで書き、例にも yyyy-MM-dd が使われています。「カスタム日時形式文字列」のとおり、この書き方では MM が月、mm が分です。
Excelと同じつもりで formatDateTime(<日付>, 'yyyy-mm-dd') と書くと、時刻が10時37分の値なら「2026-10-21」ではなく「2026-37-21」のように、月の位置に分が入った文字列ができます。Excel側の検索用の列とは一致しません。メンバー限定動画でも8分16秒から、Power Automate側では大文字の MM にしないといけない、と注意しています。
日付が、日本時間ではない
フローの中で扱う時刻は、日本時間とは限りません。たとえば、前述の関数の参照にある utcNow は、名前のとおり世界協定時刻(UTC)で現在の時刻を返します(ページの例の戻り値は、末尾が Z です)。UTCは日本時間より9時間遅れているので、日本時間の朝9時より前の時刻をそのまま日付にすると、前の日の日付になります。
確かめ方は簡単です。フローの実行履歴を開き、日付の元になっている値を見ます。2026-10-20T23:15:00Z のように末尾が Z なら、それはUTCです。同じページにある convertFromUtc で日本時間に直すと、Excel側の日付とそろいます。タイムゾーン名には Tokyo Standard Time を指定し、3つ目の引数で書式も一緒に指定できます。
convertFromUtc(<日付>, 'Tokyo Standard Time', 'yyyy-MM-dd')
件名などに、余計な文字が付いている
無料動画では、メールの件名をキー値にしています。返信メールの件名には先頭に「RE: 」が付くので、そのままでは元の件名で作った行と一致しません。動画の3分49秒から、件名を変数に入れ、replace 関数で「RE: 」を取り除いてからキー値に使うところを見られます。
人が入力した値をキーにするときは、前後の空白にも気を付けてください。式の trim で前後の空白を落とせます。Excel側も同じように整えておかないと、片側だけ空白が残って一致しません。
そもそも値が取れていない
Formsの回答者のメールアドレスをキーに使うなら、回答者を特定できる設定のフォームでないと、メールアドレスそのものが取れません。メンバー限定動画では9分56秒から、Forms側で認証を有効にしているから回答者のメールアドレスと送信日時が取れている、と説明しています。キーの組み立てを疑う前に、実行履歴でキー値の欄が空になっていないかを確かめてください。
症状3:更新したら、前に入っていた内容が消えた
「確認した人」の列に、返信が来るたびに名前を書き足していきたい。そう考えて「行の更新」で名前を入れると、前の人の名前が消えて、最後の1人だけが残ります。
これは仕様どおりの動きです。Microsoft Learnのコネクタの説明は「入力値によって指定されたセルが上書きされ、空白の列は更新されません」と書き、続けて、上書きではなく追加したいなら「“行の取得” アクションを使用してコンテンツを最初に取得します」と案内しています。
手順は次のようになります。
- 「行の取得」で、同じキー列・キー値の行を読む
- 読んだ「確認した人」の値と、新しい名前をつなぐ
- つないだ値を「行の更新」で書き戻す
無料動画では8分29秒から、既存の文字列を上書きしてはいけないので先に「行の取得」で値を取ってから、既存の値に差出人を足して更新するところを見られます。さらに11分31秒から、名前の間に改行を入れたいときに、改行だけを入れた変数を用意してつなぐやり方を試しています。
逆に「空のまま送った列は更新されない」ので、セルを空にしたいときに欄を空けておいても消えません。 更新したい列だけに値を入れればよい、と考えると分かりやすくなります。
症状4:違う行が更新される、一部の行しか更新されない
同じキー値の行が2つ以上あると、Microsoft Learnのとおり最初の行だけが更新されます。冒頭の出欠表でメールアドレスだけをキーにすると、その人の行のうち一番上の日付にだけ丸が付き続けます。症状1の検索用の列を作るのは、これを防ぐためでもあります。
検索用の列を作った後も、表に同じ組み合わせの行が紛れ込んでいないか、Excel側で数えておくと安心です。たとえば、テーブルに次の列を足すと、重複している行に2以上の数が出ます。
=COUNTIF([検索用], [@検索用])
もう1つ、同じページの「一般的な既知の問題と制限事項」には、Excelファイルは最後にコネクタを使ってから最大6分間、更新や削除のためにロックされることがあると書かれています。複数のクライアントから同時に同じファイルへ書き込むのは避けるように、とも書かれています。人がExcelを開いて編集している最中に、フローも同じ表を書き換える運用は、更新が失敗したり、内容が食い違ったりする原因になります。
まとめ:「行の更新」がうまくいかないときのチェックリスト
- 表はExcelの「テーブル」になっているか。テーブル名は分かる名前か
- キー列の値は、その表の中で1行に決まるか。決まらないなら、2つの値を区切り文字付きでつないだ「検索用」の列を作る
- Power Automate側で、Excelの検索用の列と1文字も違わない文字列を組み立てているか。日付の書式は
MM(月)とmm(分)を取り違えていないか - 日付の元の時刻はUTCではないか。実行履歴で末尾の
Zを確かめ、必要ならconvertFromUtcで日本時間に直す - 件名の「RE: 」、前後の空白、大文字と小文字など、見た目では分からない違いを両側でそろえているか
- 書き足したい列は、「行の取得」で今の値を読んでから、つないで書き戻しているか
- 表に同じキーの行が紛れ込んでいないか。
COUNTIFの列で見張っているか - 人が同じファイルを編集している最中に、フローが書き込む運用になっていないか
「行の更新」が思いどおりに動かないとき、Power Automateが壊れているわけではありません。1つの列の値で探して、最初の1行を上書きする。この動きに合わせて表とキーを作れば、2つの条件でも、書き足しでも、同じアクションで扱えます。






