SANANEBLOG
GAS PR

Googleフォームの回答未実施者確認ツールの作成方法【GAS】

記事内に商品プロモーションを含む場合があります

はじめに

Googleフォームを利用される際、回答者の管理が難しく感じることはありませんか?

特に大規模なイベントやアンケート、テストなどを実施する場合、回答者は分かっても、未回答者を追跡するのは一苦労です。

今回の記事では、GAS(Google Apps Script)とGoogleフォーム、スプレッドシートの組み合わせを使って、未回答者を自動で一覧化する方法をご紹介します。

今回のツールで得られるメリット
  1. 手動での未回答者のチェック作業が不要となり、時間の節約が可能。
  2. データの見落しを減少させ、精度の高い回答管理を実現。
  3. スクリプトの編集が最小限のため、初心者でも管理が容易。
SANANE

ツール自体は10分~15分ほどで作成可能です。

https://sananeblog.com/gas-form-mail/
Googleフォームの回答者に自動でお礼メールを送信する方法【GAS】 はじめに 今回の記事では、Google Apps Script を使用してGoogle フォームの回答者に自動でお礼などのメール...

動作イメージ

SANANE

まずは簡単に今回のツールの動作について説明します。

サンプルフォームとして、以下のようなフォームを用意します。

回答欄に氏名を記載させる質問を作成しておきます。

また、以下のようなスプレッドシートを用意しておきます。A2セルより下のA列には事前に全回答者の氏名を記載しておきます。

テストフォームが送信されると、自動でGASが「フォームに記載した氏名」と「実施者列の氏名」が一致するか検索を行い、一致する氏名の隣のセルに完了マークとして「✓」を入力します。

同時にD列には未実施者の一覧が記載されます。

この処理はフォームが送信されるたびに実行されるため、更新処理などは必要ありません。

作成方法

今回の自動化処理の作成には以下が必要となります。

  • Googleフォーム
  • Googleスプレッドシート
  • Google Apps Script
  • Googleフォーム回答者の名簿

スプレッドシートの新規作成

まず、Google スプレッドシートにアクセスします。

アクセスしたら、[新しいスプレッドシートを作成]> [空白]をクリックして新しいスプレッドシートを作成します。

また、以下はこの後の作業で使用するため、パラメータを控えておいてください

スプレッドシートのID

スプレッドシートの上部アドレスバーより、IDを控えておく。

コピーする場所は下記の「ここの値をコピーして控えておく」の箇所。

https://docs.google.com/spreadsheets/d/ここの値をコピーして控えておく/edit#gid=0

合わせて、下記画像のような表を作成します。1列目にそれぞれ任意のヘッダーをつけ、A2セルより下のA列に回答者全員の氏名を記載しておきます。

Googleフォームの操作

Googleフォームにアクセスします。

すでに作成してあるフォームを選択するか、新規でフォームを作成したら、質問を作成し質問の中に回答者の氏名を回答させる質問を追加しておきます。

氏名を回答させる質問はフォームの一番最初の質問にして下さい。

2番目以降に氏名を記入させる質問を入れる場合は後のコードの編集が必要となります。

作成が完了したら、フォーム右上「・・・」からスクリプトエディタをクリックします。

GASの設定

スクリプトエディタをクリックすると、GASのウィンドウが起動します。

ここから、GAS上でコードを記載していきます。もともと記載してある以下コードは削除します。

function myFunction() {

}

削除したら、以下コードをコピーしてそのまま貼り付けてくだい。

このとき、3行目の’ ‘で囲われた部分を以下のように書き換えてください。

YOUR_SPREADSHEET_ID:前項で控えておいたスプレッドシートのID

function onFormSubmit(e) {
  // スプレッドシートIDを指定
  var SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID';  // この文字列を実際のIDに置き換えてください
  
  // スプレッドシートを開く
  var ss = SpreadsheetApp.openById(SPREADSHEET_ID);
  var sheet = ss.getActiveSheet();
  
  // フォームの回答を取得
  var formResponse = e.response;
  var itemResponses = formResponse.getItemResponses();
  var firstAnswer = itemResponses[0].getResponse();
  
  // A2セルからの名簿リストを取得して一致するセルを検索
  var names = sheet.getRange('A2:A' + sheet.getLastRow()).getValues();
  var statuses = sheet.getRange('B2:B' + sheet.getLastRow()).getValues();

  // 未実施者リストを作成
  var uncompleted = [];
  for (var i = 0; i < names.length; i++) {
    if (names[i][0] == firstAnswer) {
      statuses[i][0] = '✓';
    }
    if (!statuses[i][0] || statuses[i][0] !== '✓') {
      uncompleted.push([names[i][0]]);
    }
  }

  // B列にステータスを更新
  sheet.getRange('B2:B' + sheet.getLastRow()).setValues(statuses);

  // D2セル以下をクリア
  sheet.getRange('D2:D' + sheet.getLastRow()).clearContent();

  // D列に未実施者を記載
  if (uncompleted.length > 0) {
    sheet.getRange('D2:D' + (1 + uncompleted.length)).setValues(uncompleted);
  }
}

2番目以降に氏名を記入させる質問を入れる場合は[var firstAnswer = itemResponses[0].getResponse();]の[0]に「質問の順番-1」の数字を入力します。(例:3番目の質問であれば2)

スプレッドシートID等の記入が完了したら、[Ctrl+S]かApps Script 上部バーの[プロジェクトを保存]をクリックして保存します。

トリガーの作成

次に引き金となるアクション(トリガー)を作成します。

GASスクリプトエディタの左部のメニューから「トリガー」(時計のアイコン)をクリックします。

画面下部の「+ トリガーを追加」をクリックします。

実行する関数を[onFormSubmit]に設定し、イベントソースを[フォームから]に、イベントタイプを[フォーム送信時]に設定します。

トリガー作成時にエラーが発生した場合は、スクリプトがうまく保存されていない場合がありますので、再度コードを書く画面に戻ってブラウザの更新をしてください。その後再度スクリプトをコピー&修正してください。

最後に[保存]をクリックします。

最初の関数の実行には権限が必要となるため、[承認が必要です]というモーダルが表示されたら、

[権限を確認]>[表示されているGoogleアカウント(Choose an account)]>[詳細(Advanced)]>[Go to 無題のプロジェクト(unsafe)]>[許可(Allow)]まで移動します。

クリック後トリガーが作成されます。

自動化処理の実行

以上で自動化処理の作成は完了です。あとはGoogleフォームから[送信]で任意の方にフォームを送信し、回答を得ると自動でスプレッドシートにリアルタイムの回答状況が更新されます。

フォームに回答する氏名とスプレッドシートに記載する氏名が完全に一致している必要があります。

つまり、名簿が違っていたり苗字と名前の間に入れる半角や全角スペースが人によってバラバラだとうまくツールが機能しないため、フォーム上で入力規則の案内などを行うことをおすすめします。

GASおすすめ本

GASをもっと勉強したい!ほかにも自分で何か作成したい!という方には以下がおすすめです。