Power Automate で2つの列をキーにして Excel ファイルの行を更新する
この記事の内容
- Microsoft Forms の回答をトリガーに、Power Automate で Excel の行を更新する方法を紹介します
- Power Automate の「行の取得」アクションではキー列を1つしか指定できないという制約があります
- その制約を回避するため、Excel 側に「検索用列」を追加してメールアドレスと日付を結合する方法を解説します
- Excel の
TEXT関数と Power Automate のformatDateTime関数を組み合わせて、同じ形式の文字列を生成します - 2つの列を実質的に1つのキーとして扱うことで、複合キーによる行の特定を実現します
シナリオの概要
今回対応するシナリオは以下のようなものです。
- Microsoft Forms でユーザーが回答を送信する
- そのフォーム回答をトリガーに Power Automate が起動する
- 回答したユーザーの メールアドレス と 回答日付 の2つの値をキーにして、Excel の該当行を特定する
- 該当行の「回答」列に「〇」を記入する
たとえば、日付ごとの出席確認テーブルのように、誰がいつ回答したかを記録したい場合に活用できるシナリオです。
問題:Power Automate は複合キーに対応していない
Power Automate の「行の取得」や「行の更新」などの Excel アクションでは、キー列を1つしか指定できません。
そのため、「メールアドレス」と「日付」の2列を同時にキーとして行を特定しようとしても、標準のアクションではうまくいきません。これが「2つの列をキーにしたい」という要件でつまずくポイントです。
解決策:検索用列を1つ作って複合キーにする
この制約を回避するために、Excel 側に「検索用」の列を追加します。この列には、メールアドレスと日付を結合した文字列を格納します。これにより、2つの値を実質的に1つのキーとして扱えるようになります。
Excel 側の準備
Excel のテーブルに「検索用」という名前の列を追加します。この列には、TEXT 関数を使って日付を文字列に変換し、メールアドレスと結合した値を入れます。
=A2&TEXT(B2,"YYYY-MM-DD")
A2はメールアドレスの列B2は日付の列TEXT(B2, "YYYY-MM-DD")で日付を2024-02-10のような文字列に変換する&演算子で文字列を結合する
これにより、検索用列には masahiko.ebisu@example.com2024-02-10 のような一意の文字列が格納されます。
注意: 検索用列は見た目がよくないため、非表示にするか、必要であれば ID 列として別途管理テーブルを用意する方法もあります。
Power Automate 側の実装
ステップ1:トリガーの設定
「新しい応答が送信されたとき」(Microsoft Forms)をトリガーに設定します。
ステップ2:応答の詳細を取得
「応答の詳細を取得する」アクションを追加し、フォームの ID と応答 ID を指定します。これにより、回答者のメールアドレスや送信日時などの情報が取得できます。
ステップ3:検索用変数を初期化する
Excel の検索用列と同じ形式の文字列を Power Automate 側でも生成します。
まず、日付のフォーマット変換には formatDateTime 関数を使います。
注意: Excel の
TEXT関数ではYYYY-MM-DD(大文字のMM)を使いますが、Power Automate のformatDateTimeではyyyy-MM-dd(小文字のyyyy、大文字のMM、小文字のdd)を使います。大文字・小文字が異なる点に注意してください。
次に、メールアドレスと整形した日付を結合した変数を作成します。
この変数が、Excel の検索用列と同じ形式の文字列になります。
ステップ4:Excel の行を取得する
「行の取得」アクションを追加し、以下のように設定します。
- ファイル: 対象の Excel ファイルを指定
- テーブル: 対象のテーブルを指定
- キー列:
検索用(先ほど追加した列) - キー値: ステップ3で作成した変数
ステップ5:該当行を更新する
「行の更新」アクションを追加し、取得した行の「回答」列に「〇」を書き込みます。ファイルやテーブルは「行の取得」と同じものを指定し、キーの列・値も同様に設定します。
動作確認
Forms でフォームを回答送信すると、Power Automate が起動し、以下の処理が順番に実行されます。
- フォームの応答 ID を取得
- 回答者のメールアドレスと送信日時を取得
- 検索用の文字列を生成(例:
masahiko.ebisu@example.com2024-02-10) - Excel の検索用列からその文字列と一致する行を特定
- 該当行の回答列に「〇」を記入
まとめ
Power Automate の Excel アクションでは、複数の列を組み合わせたキー指定が標準ではサポートされていません。この制約を回避するには、Excel 側に検索用の結合列を追加し、Power Automate 側でも同じ形式の文字列を生成してキーとして使うというアプローチが有効です。
ポイントをまとめると以下のとおりです。
- Excel では
TEXT関数と&演算子で日付とメールアドレスを結合した検索用列を作成する - Power Automate では
formatDateTime関数とconcat関数で同じ文字列を生成する - 日付フォーマットの大文字・小文字は Excel と Power Automate で異なるため注意が必要
- 検索用列は非表示にするか、ID 管理テーブルで別途整理することも検討できる
今回紹介したのはあくまで一つのアプローチです。要件に応じてさまざまな実装方法が考えられますので、ぜひ応用してみてください。