GASで簡単!フォームからメールアドレスを取得する方法

GASを使って、Googleフォームからメールアドレスを取得したいんだけど、どうすればいいんだろう?仕組みがよくわからなくて…。
猫男
猫男
catman
catman
catmanが伝授しよう。フォーム設定によって2つの方法があるから、それぞれ紹介するぞ。

1. GASでフォームの「メールアドレスを収集」を使う場合

Googleフォームの設定で「デフォルトでメールアドレスを収集する」を「確認済み」にしておくと、GASで簡単にメールアドレスを取得できます。

フォームの設定手順

Googleフォームの右上「設定」をクリックして、デフォルトのプルダウンをクリック。

そこの「デフォルトでメールアドレスを収集する」を「確認済み」にしましょう。

gas

GASのスクリプト


function onFormSubmit(e) {
  const email = e.response.getRespondentEmail();
  Logger.log("送信者のメールアドレス: " + email);
}

このスクリプトをフォームに紐づいたコンテナバインド型のエディタに書きます。

ユーザーがGoogleアカウントでログインして回答したときのアドレスを取得できるはずです。

 

2.フォームの「メールアドレス」項目を自分で作ってGASで取得する

ログインを必要としないアンケートや、より自由なフォームを作りたいときは、フォームに「メールアドレスを入力してください」といった質問を追加しておきます。


function getEmailsFromResponses() {
  const form = FormApp.openById('YOUR_FORM_ID');
  const responses = form.getResponses();

  responses.forEach(response => {
    const items = response.getItemResponses();
    items.forEach(item => {
      const title = item.getItem().getTitle();
      const answer = item.getResponse();
      if (title.includes("メールアドレス")) {
        Logger.log("入力されたメールアドレス: " + answer);
      }
    });
  });
}

この方法では、質問のタイトルに「メールアドレス」という文字列が含まれているかで判定しています。

メールアドレス取得を自動化する方法

ただし、です。

上記のスクリプトたちをGASエディタに書き込んだだけでは、メールアドレスを取得できません。

フォームの送信ごとに自動的に処理したいなら、GASのトリガー機能を活用しましょう。

以下の手順でトリガーを設定します。

 

  1. GASエディタで「時計アイコン(トリガー)」をクリック
  2. 「トリガーを追加」を選び、関数を選択
  3. イベントの種類に「フォーム送信時」、イベントのソースに「フォームから」を設定して保存

 

gas フォーム トリガー

最終的にこのようなトリガーを設定。

gas フォーム トリガー

詳しくは「GASでGoogleフォーム送信時のトリガーを設定する方法」を参考にしてみてください。

 

 

まとめ:Googleフォームからメールアドレスを取得する2つの方法

  • フォーム設定でメールアドレスを収集getRespondentEmail() を使う
  • 質問としてメールアドレスを作成 → 回答から抽出する
  • フォーム送信トリガーで自動処理を設定
これでフォームから簡単にメールアドレスが取得できるなんて、すごく便利だ!
猫男
猫男
catman
catman
そうさ、GASを活用すればGoogleフォームの可能性は無限大。どんどん使いこなしていこう!

 

練習問題

GASを使って、フォーム回答から取得したメールアドレスをスプレッドシートに記録するスクリプトを作成してみよう。

 

 

解答・解説


function saveEmailsToSheet() {
  const form = FormApp.openById('YOUR_FORM_ID');
  const responses = form.getResponses();
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails');
  sheet.clear(); // 書き直す場合

  responses.forEach((response, index) => {
    const email = response.getRespondentEmail(); // or 回答から抽出する方式もOK
    if (email) {
      sheet.getRange(index + 1, 1).setValue(email);
    }
  });
}

このスクリプトは、すべてのフォーム回答からメールアドレスを取得し、「Emails」シートに1列ずつ書き出します。