【Power Automate】Microsoft Formsの添付ファイル(ファイルアップロード)を自動で取得・保存する方法

はじめに
この記事では、Power Automate を使って Microsoft Forms に提出された添付ファイルを、OneDrive の好きなフォルダーへ自動で取得・保存する方法を、初心者がつまずきやすいポイントを押さえながら解説します。
Microsoft Forms には「ファイルのアップロード」という質問があり、アンケートや申請フォームでファイルを提出してもらえます。
ただ、提出されたファイルは Forms 作成者の OneDrive の奥深く(「アプリ」フォルダーの中)に自動で振り分けられるため、毎回そこから探して整理するのは面倒です。
この記事のフローを作れば、提出と同時に好きなフォルダーへ自動でまとめられます。実際に動かして検証した結果もあわせて紹介します。

このフローでできること
- Forms にファイルが提出されたら、自動で指定フォルダーへコピー保存する
- 複数ファイルが提出されても、1つずつループして全部保存する
- 提出ファイルを1か所にまとめて、後から探しやすくする
事前準備:ファイルアップロード質問付きのフォーム
まず、トリガーで選択するための「ファイルのアップロード」質問を含む Formが必要です。今回は検証用に「書類提出フォーム(ファイル添付)」を作成し、テキスト質問(申請者名)と、ファイルのアップロード質問(提出書類)を用意しました。複数ファイルを試せるよう、ファイル数の上限は3にしています。

フローの全体像
作成するフローは次の構成です。最大のポイントは、ファイルアップロードの回答が「JSON という文字列」で渡ってくるため、そのままでは扱えず「JSON の解析」と「Apply to each(繰り返し)」を挟む点です。
① 新しい応答が送信されるとき(Forms) → ② 応答の詳細を取得する → ③ JSON の解析 → ④ Apply to each〔ファイル コンテンツの取得 → ファイルの作成〕

フローの作成手順
「自動化したクラウド フロー」を作成し、次の順にアクションを追加していきます。
トリガーに Microsoft Forms の「新しい応答が送信されるとき」を選びます。フロー作成のダイアログで、対象の Form ID(今回は「書類提出フォーム(ファイル添付)」)を指定します。

トリガーだけでは回答の中身(ファイル情報)が取れないので、Microsoft Forms の「応答の詳細を取得する」を追加します。フォーム ID に同じ Form を指定し、応答 ID にはトリガーの動的コンテンツ「応答 ID」を入れます。

ファイルアップロードの回答は、次のようなJSON 文字列(配列)として渡されます。ファイル名や、OneDrive 上のファイルを特定する id などが入っています。
[{"name":"sample.pdf","link":"https://.../sample.pdf","id":"01ABCXYZ","type":null,"size":12345,"referenceId":"ref-123","driveId":"b!driveid","status":1,"uploadSessionUrl":null}]このままでは繰り返し処理できないので、「JSON の解析」アクションで配列に変換します。
Content に「応答の詳細を取得する」のファイルアップロード回答(提出書類)を入れ、Schema は「サンプル ペイロードを使用してスキーマを生成」をクリック、表示されたテキストボックスに上の JSON を貼り付けることで自動生成することができます。

「JSON の解析」の出力(Body)は配列なので、「それぞれに適用する(Apply to each)」で1ファイルずつ処理します。ループの中にまず OneDrive for Business の「ファイル コンテンツの取得」を置き、提出ファイルの中身を取り出します。ファイルの指定には、現在の項目の id(Body id)を使います。

続けて同じループ内に OneDrive for Business の「ファイルの作成」を置き、保存先フォルダーにコピーを作成します。設定は次の通りです。
- フォルダーのパス:保存したいフォルダー(例では
/Attachments) - ファイル名:現在の項目の
name(Body name) - ファイル コンテンツ:「ファイル コンテンツの取得」の出力

実際に動かして検証
フローを保存し、フォームのプレビューから2つのファイル(PDF と Excel)を添付して送信しました。

送信すると、フローが自動で起動し、約10秒で成功しました。

実行詳細を見ると、「それぞれに適用する」が2回ループ(提出した2ファイル分)し、それぞれで「ファイル コンテンツの取得」「ファイルの作成」が成功していました。Forms はファイル名に提出者名を付ける仕様のため、保存名もそれを引き継いでいます。

「ファイルの作成」の詳細でも、保存先 /Attachments にファイルが作成されたことが確認できました。OneDrive を開くと、2つのファイルがしっかり保存されています。


「JSON の解析」さえ越えれば、あとは2つのアクションを置くだけ。複数ファイルも自動でループしてくれるので安心です!
つまずきやすいポイント
- 回答は JSON 文字列:そのまま「ファイルの作成」に渡してもループ処理できません。必ず「JSON の解析」→「Apply to each」を挟みます。
- 保存先フォルダーは先に作る:「ファイルの作成」はフォルダーを自動生成しません。
- 個人フォームは OneDrive、グループフォームは SharePoint:保存元が変わるので、使うコネクタも変わります。
- 同名ファイルの衝突が気になる場合は、ファイル名にタイムスタンプを足すなどの工夫をすると安心です。
あわせて読みたい
Forms × Power Automate は、保存だけでなく通知や自動返信と組み合わせると一気に実用的になります。
メールに届いた添付ファイルを自動保存したい場合はこちら。

Forms に回答が来たことをTeams に通知したい場合はこちら。

回答者へ自動返信メールを送りたい場合はこちら。

まとめ
- Forms の添付ファイル保存は 「応答の詳細を取得 → JSON の解析 → Apply to each(取得 → 作成)」 の流れで作る
- 最大のポイントは 「回答は JSON 文字列」。必ず「JSON の解析」で配列に変換する
- 保存先フォルダーは事前に作成しておく
提出ファイルを1か所にまとめておけば、後の確認や共有がぐっとラクになります。ぜひ自分の業務フォームでも試してみてください。





