もくじ
クイズに関する制約
フォームの作成について
Microsoft Formsでは非公式を含めフォームを作成するapiは用意されていない。
クイックインポートを利用することで、ファイルから問題や解答を一括で作成することはできるが、その他レイアウトなどの詳細な設定は画面上から行う必要がある。
解答の保存場所について
Microsoft Formsを作成する際の入り口は3つある。
Forms画面, OneDrive, Sharepointであるが、クイズの作成はFormsからしか行うことができない。そのため、解答エクセルの保存場所についても、こちら側で確認をすることはできない。(画面上で閲覧をすることはできるが)
ゆえに、解答のエクセルを読み取りに行くということができない。
解答の取得について
Power Automateからの取得
Power Automateの「新しい応答が送信されるとき」+「応答の詳細を取得する」アクションでユーザーが入力や選択した情報は取得できるが、点数は取得することができない。よってPower Automateから点数の集計を行うことはできない。
"body": {
"responder": "★回答者のメールアドレス★",
"submitDate": "11/15/2025 8:33:34 AM",
"r1bc4c9037410428cad341a969eb18a22": "香川県",
"rbed8708ff42c45ea8f7c78c726d5d284": "24",
"r2acde76503ce4ab1ad349579bc06ecb6": "月",
"r1b2a5cf05d474bee824ebb38246bdfec": "",
"r3dd29d0f6ae94737a46ba873935ba886": "火星",
"r6b1020fcde674efebe1f09527eea0b6e": "信濃川",
"rdd58e472608d4e35bc1ed63a8baaaf57": "東京",
"r235b600bfaeb412abef78c49fb97c268": "インド",
"r8421280736b946f0b633432f1f9b69b8": "抵抗",
"r63be6c40cff4479eb1654207b3c2a489": "山梨県"
}
rest api(非公式)によるレスポンスの取得 (※1)
rest apiでもユーザーの回答情報を取得することはできるがやはり、点数情報は含まれていない。
quizResultというパラメータもあるが、未使用っぽい…
// リクエスト
https://forms.office.com/formapi/api/forms{formID}/responses
{
releaseDate: "0001-01-01T00:00:00Z",
quizResult: null,
comments: [],
emailReceiptConsent: null,
submitLanguage: null,
msRewardsData: null,
answerExplanation: null,
id: 1,
startDate: "2025-11-15T07:36:35.4619966Z",
submitDate: "2025-11-15T07:36:49.1759966Z",
responder: "★メールアドレス★",
responderName: "★ユーザー名★",
answers: "[{\"answer1\":\"香川県\",\"questionId\":\"r1bc4c9037410428cad341a969eb18a22\"}
,{\"answer1\":\"\",\"questionId\":\"rbed8708ff42c45ea8f7c78c726d5d284\"}
,{\"answer1\":\"月\",\"questionId\":\"r2acde76503ce4ab1ad349579bc06ecb6\"}
,{\"answer1\":\"10,000円\",\"questionId\":\"r1b2a5cf05d474bee824ebb38246bdfec\"}
,{\"answer1\":\"火星\",\"questionId\":\"r3dd29d0f6ae94737a46ba873935ba886\"}
,{\"answer1\":\"石狩川\",\"questionId\":\"r6b1020fcde674efebe1f09527eea0b6e\"}
,{\"answer1\":\"名古屋\",\"questionId\":\"rdd58e472608d4e35bc1ed63a8baaaf57\"}
,{\"answer1\":\"\",\"questionId\":\"r235b600bfaeb412abef78c49fb97c268\"}
,{\"answer1\":\"\",\"questionId\":\"r8421280736b946f0b633432f1f9b69b8\"}
,{\"answer1\":\"山梨県\",\"questionId\":\"r63be6c40cff4479eb1654207b3c2a489\"}
]"
},
rest api(非公式)によるファイルダウンロードの取得
同様に非公式だが、点数情報込みのエクセルファイルをダウンロードすることができる。(json形式での取得ではない)
また、Power Automateの「新しい応答が送信されるとき」トリガーと組み合わせて、1件ずつ取得する方法もあるようだ。(※2)
ただし、クイズの数が多い場合、クイズ数分だけPower Automateのフローを作成しなければならないため、そこがネックになる。
// リクエスト
https://forms.office.com//formapi/DownloadExcelFile.ashx?formid={formid}&timezoneOffset=180&minResponseId=1&maxResponseId=5000}
クイズで赤点のユーザーに再度同じクイズの解答を促すフロー
気力が無いため、ロジックだけ記載しておく。
https://forms.office.com/formapi/api/forms
form名とformIDの一覧を取得する- 事前に定義したpower automateのform名の配列に合致するform名があればformIDを取得する
https://forms.office.com/formapi/api/forms{formID}/responses
取得したレスポンスのsubmit-dateが本日や1時間前などの結果のみを抽出し、そのIDの範囲を確認する- 3.で取得したIDをもとに
https://forms.office.com//formapi/DownloadExcelFile.ashx?を実行
解答付きのエクセルファイルをSharePointの任意の場所へ保存 - エクセルファイルを開き、メールアドレス、点数を取得
- 点数が赤点であるかをif文で判定
- 赤点であった場合、メールアドレスで該当ユーザを特定し、TeamsやSlack等で通知を行う
- 通知する際にはformIDを埋め込み、回答用URLを組み立てる
https://forms.office.com/Pages/ResponsePage.aspx?id={formId}
メンテナンスとして、利用者はpower automate中のform 名の配列のみ見直せばよい。
または、formに共通した名前を含める(例えば、【チェックテスト001】など)を付けておくことで、配列の見直し自体を不要にすることができるが、逆に利用しなくなったフォームは削除するか、名前を変更する必要があるため、トレードオフではある。
参考サイト
※1 Microsoft Forms API 現時点でのまとめ #PowerAutomate – Qiita
※2 メンテナンス不要!どんなForms クイズでも採点するPower Automate フロー #PowerAutomate – Qiita