[Microsoft Forms]Forms関連の仕様の整理

クイズに関する制約

フォームの作成について

Microsoft Formsでは非公式を含めフォームを作成するapiは用意されていない。

クイックインポートを利用することで、ファイルから問題や解答を一括で作成することはできるが、その他レイアウトなどの詳細な設定は画面上から行う必要がある。

[Microsoft Forms]クイックインポートを利用してエクセルからクイズを作成する (非推奨)

 

解答の保存場所について

Microsoft Formの3つの作成手順

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のフローを作成しなければならないため、そこがネックになる。

[PowerAutomate]複数のForm(クイズ)の回答を一括でエクスポートする

// リクエスト
https://forms.office.com//formapi/DownloadExcelFile.ashx?formid={formid}&timezoneOffset=180&minResponseId=1&maxResponseId=5000}

 

クイズで赤点のユーザーに再度同じクイズの解答を促すフロー

気力が無いため、ロジックだけ記載しておく。

  1. https://forms.office.com/formapi/api/forms
    form名とformIDの一覧を取得する
  2. 事前に定義したpower automateのform名の配列に合致するform名があればformIDを取得する
  3. https://forms.office.com/formapi/api/forms{formID}/responses
    取得したレスポンスのsubmit-dateが本日や1時間前などの結果のみを抽出し、そのIDの範囲を確認する
  4.  3.で取得したIDをもとに https://forms.office.com//formapi/DownloadExcelFile.ashx?を実行
    解答付きのエクセルファイルをSharePointの任意の場所へ保存
  5.  エクセルファイルを開き、メールアドレス、点数を取得
  6.  点数が赤点であるかをif文で判定
  7.  赤点であった場合、メールアドレスで該当ユーザを特定し、TeamsやSlack等で通知を行う
  8.  通知する際には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