『イベントや学会などの事前参加登録』Googleフォームで受付番号とメールを自動化する方法【Apps Script付き】

イベントや学会などの事前参加登録で、Googleフォームとスプレッドシートを活用している方へ。この記事では、Googleフォームで受付情報を集め、自動で受付番号を発行し、メールでお知らせする仕組みを構築する方法を、実際のコード付きでご紹介します。


この記事でできること

  • Googleフォームで詳細な参加登録を受け付ける
  • 回答者ごとに3桁の「受付番号」を自動付与
  • 受付番号や入金予定金額を自動計算
  • Apps Scriptを使って参加者に自動メール送信
  • フォーム回答の修正・編集にも対応可能

Googleフォームの作成例

項目タイプメモ
タイムスタンプ自動Googleフォームの標準
メールアドレスショートアンサー
氏名テキスト
氏名(ふりがな)テキスト
所属機関名テキスト
連絡先の郵便番号テキスト
連絡先の住所テキスト
連絡先の電話番号テキスト
連絡先のEmailテキスト
学会の会員かラジオボタン「はい/いいえ」
参加区分ラジオボタン「会員」「非会員」「大学院生」など
学会の会員番号テキスト
情報交換会への参加ラジオボタン「参加/不参加」

上記はすべてフォームで回答者が入力する内容です。


スプレッドシートに手動で追加する列

Googleフォームに接続されたスプレッドシートには、上記の質問に対応した列が自動生成されます。 それに加えて、以下の 5つの列 を手動で追加しておくことで、Apps Script による自動化が可能になります:

内容index(0始まり)メモ
N受付番号13Apps Scriptで自動入力されます
O入金予定金額14Apps Scriptで参加区分+情報交換会の有無で自動計算されます
P前回送信ハッシュ15Apps Scriptで自動入力され、メール送信済みかを判断するために使用されます
Q入金日(手動)16入金が確認されたら手動で入力できます
R実際の入金金額(手動)17実際に入金された金額を手動で記録します

これらの5列は、フォーム作成後にスプレッドシートの右端に手動で追加してください。 Apps Script はこれらの列を使って、番号付与や金額計算、メール送信を行います。


Apps Scriptで自動化(受付番号 + 金額 + メール送信)

Googleスプレッドシートで「拡張機能」→「Apps Script」を開き、以下のコードを貼り付けます。

function onFormSubmit(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("フォームの回答 1");
  const data = sheet.getDataRange().getValues();

  const emailIndex = 1;
  const nameIndex = 2;
  const categoryIndex = 10;
  const partyIndex = 12;
  const idIndex = 13;
  const paymentIndex = 14;
  const hashIndex = 15;

  let idMap = {};
  let nextId = 1;

  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    const email = row[emailIndex].toString().trim();
    const name = row[nameIndex].toString().trim();
    if (!email) continue;

    const key = `${email}_${name}`;

    if (!idMap[key]) {
      let existingId = null;
      for (let j = 1; j < i; j++) {
        const rowJ = data[j];
        const keyJ = `${rowJ[emailIndex].toString().trim()}_${rowJ[nameIndex].toString().trim()}`;
        if (keyJ === key && rowJ[idIndex]) {
          existingId = rowJ[idIndex];
          break;
        }
      }
      idMap[key] = existingId || String(nextId++).padStart(3, "0");
    }

    const currentId = idMap[key];
    sheet.getRange(i + 1, idIndex + 1).setValue(currentId);

    let category = row[categoryIndex];
    let party = row[partyIndex];
    let amount = 0;
    if (category.includes("会員(事前")) amount += 5000;
    else if (category.includes("非会員")) amount += 6000;
    else if (category.includes("大学院生")) amount += 2000;
    if (party.includes("参加")) amount += 5000;

    sheet.getRange(i + 1, paymentIndex + 1).setValue(amount);

    const hashNow = `${currentId}_${amount}`;
    const previousHash = row[hashIndex] ? row[hashIndex].toString() : "";
    if (hashNow === previousHash) continue;

    const subject = "受付番号のご案内";
    const body = `${name} 様\n\nこの度はご登録ありがとうございます。\n\n受付番号:「${currentId}」\n入金予定金額:「${amount}」円\n\nよろしくお願いいたします。`;

    MailApp.sendEmail({ to: email, subject, body });
    sheet.getRange(i + 1, hashIndex + 1).setValue(hashNow);
  }
}

トリガーの設定(自動でスクリプトが動くようにできます)

Apps Script画面の左側「トリガー(⏰)」から、次のように設定します:

  • 実行する関数:onFormSubmit
  • イベントの種類:フォーム送信時

保存を忘れるとトリガーに表示されません!必ず保存してから設定しましょう。


フォーム編集にも対応できます

このスクリプトは、Googleフォームの回答を後から編集した場合にも、内容が変わっていれば再計算・再送信が行われるように設計されています。

  • 「受付番号 + 金額」で生成されたハッシュを保存
  • ハッシュが変わった場合のみ、再度メール送信

これにより、不要な再送信を防ぎつつ、情報修正にも対応できます。


テスト&確認

  • フォームにテスト回答を送信してみましょう
  • スプレッドシートに「受付番号」「金額」が自動で入力されていれば成功!
  • 回答者には受付番号付きのメールが届きます

注意点

  • フォームの内容を追加したりさくじょしたりすると、スプレッドシートの列の番号と内容がずれてしまいます。
  • 現在のコードは番号のズレには対応していません。
  • また、参加費などの金額は実際の金額に合わせてコード内に入力して下さい。

次回記事予告:フォームをリセットして再スタートするには?

次回は「フォームの回答をリセットして再スタートしたいとき」の注意点や、受付番号をまた001から振り直す方法についてご紹介します。

お楽しみに!

コメント

タイトルとURLをコピーしました