Googleフォーム:回答の編集用URLを取得する方法

回答の編集を許可するを有効にしているGoogleフォームでは、回答内容を後から編集することができます。

回答を編集するには、編集用のURLが必要ですが、このURLがわからなくなってしまった場合の調べ方を紹介します。

あなたが回答者で、フォームの編集者ではない場合、この記事の方法は利用できません。

まずは、forms-receipts-noreply@google.comからのメールを探してみてください。メールが届いている場合、そのメール内に回答の編集リンクがあります。

メールが無い場合は、フォームの作成者に相談してください。
その際に、この記事を伝えるとスムーズに進むかもしれません。

スクリプトエディタでコードを実行する

右上の三点メニューから、スクリプトエディタを起動します。

三点メニュー > スクリプトエディタ

あらかじめ入力されているコード(myFunction)を削除し、当記事のコードを貼り付けます。
貼り付け後、保存してください。

不要なコードを削除し、当記事のコードを貼り付けて保存ボタンを押す

貼り付けるコードは下記です。

function getEditResponseUrl() {
  const form = FormApp.getActiveForm();
  const responses = form.getResponses();
  for (const response of responses) {
    Logger.log(
      "Email: " + response.getRespondentEmail() + "\n" +
      "Time Stamp: " + response.getTimestamp() + "\n" +
      "Edit Url: " + response.getEditResponseUrl()
    )
  }
}

コードを貼り付けたら、▷実行ボタンを押してください。

「承認が必要です」というダイアログが表示されますので、権限を確認 をクリックします。
* この部分の解説画像は、他の記事から流用しているため、実際のものと若干異なる場合があります。

このスクリプトを使うGoogleアカウントを選択します。

(この画面が表示された場合のみ)左下の 詳細 をクリックします。

(この画面が表示された場合のみ)左下の プロジェクト名(安全ではないページ)に移動 をクリックします。

右下の 許可 をクリックします。

スクリプトを実行すると、下図のようなログが出力されます。(そのフォームに提出された回答の数のログが出ます)

EmailTime Stampを参考にして対象を確認し、Edit Urlを利用してください。

なお、このURLを使えば、回答者本人でなくとも回答を編集できますので、取り扱いに注意してください。(Googleフォームの仕様です)

参考:スプレッドシートにURLを出力する

先述の方法だと、回答件数が多い場合にデータを探すのが難しいかもしれません。
その場合、ログへの出力ではなく、シートに情報を出力すれば良いです。

サンプルコードは下記のとおりです。

function createEditResponseUrlSheet() {
  // フォームの回答を取得
  const form = FormApp.getActiveForm();
  const responses = form.getResponses();

  // スプレッドシート転記用の配列を作成(1行目はヘッダー行)
  const values = [["Email", "Time Stamp", "Edit Url"]];
  for (const response of responses) {
    values.push([
      response.getRespondentEmail(),  // 回答者Email
      response.getTimestamp(),        // タイムスタンプ
      response.getEditResponseUrl()   // 回答編集用URL
    ])    
  }

  // スプレッドシートを作成
  const ssName = form.getTitle() + "_回答編集用URL一覧"
  const ss = SpreadsheetApp.create(ssName, values.length, 3);

  // スプレッドシートに転記
  const sheet = ss.getActiveSheet();
  sheet.getRange(1, 1, values.length, 3).setValues(values);
  sheet.getRange(2, 2, values.length - 1, 1).setNumberFormat('yyyy/MM/dd h:mm:ss');

  // スプレッドシートのURLを取得
  console.log(ss.getUrl());
}

このコードを実行すると、マイドライブに新規のスプレッドシートが作成され、そこに情報が出力されます。

作成されたスプレッドシート

コメント