見出し画像

GoogleフォームとGASでアンケート結果を自動集計!スプレッドシートへの反映の秘訣

はじめに

Googleフォームは、アンケートやフィードバックの収集に便利なツールです。ユーザーは自由に質問を作成し、回答をGoogleスプレッドシートに自動的に保存することができます。この記事では、Googleフォームから得たデータをGoogle Apps Script (GAS) を使用して自動的に集計し、その結果をスプレッドシートに反映させる方法を解説します。

1. Googleフォームとは何か?

Googleフォームは、Googleが提供する無料のアンケート作成ツールです。使いやすいインターフェースで質問を作成し、リンクを共有するだけで簡単に回答を収集できます。回答は自動的にGoogleスプレッドシートに保存され、リアルタイムでデータを確認することができます。

2. GASとの連携

Google Apps Script (GAS) は、Google Workspaceの各種サービスを自動化したり、カスタマイズしたりするためのスクリプト言語です。GASを使用すると、Googleフォームから送信されたデータを自動的に処理し、集計結果をスプレッドシートに反映することが可能になります。これにより、手作業でのデータ集計の手間を大幅に削減し、作業の効率化を図ることができます。

3. アンケート結果の自動集計

以下に、Googleフォームから送信されたアンケート結果を自動的に集計するためのGASのコード例を示します。

function aggregateSurveyResults() {
  try {
    var form = FormApp.getActiveForm();
    if (!form) throw new Error("アクティブなフォームが見つかりません");

    var responses = form.getResponses();
    var aggregatedData = {};

    responses.forEach(function(response) {
      var itemResponses = response.getItemResponses();

      itemResponses.forEach(function(itemResponse) {
        var question = itemResponse.getItem().getTitle();
        var answer = itemResponse.getResponse();

        if (!aggregatedData[question]) {
          aggregatedData[question] = {};
        }

        if (!aggregatedData[question][answer]) {
          aggregatedData[question][answer] = 0;
        }

        aggregatedData[question][answer]++;
      });
    });

    return aggregatedData;
  } catch (e) {
    Logger.log("Error: " + e.message);
  }
}

このスクリプトは、Googleフォームの回答を取得し、各質問ごとに回答を集計します。これにより、質問ごとにどの回答がどれだけあったかを簡単に把握できます。

4. スプレッドシートへの反映

集計されたアンケート結果をスプレッドシートに自動的に反映するためのGASのコード例を以下に示します。

function reflectResultsToSpreadsheet() {
  try {
    var aggregatedData = aggregateSurveyResults();
    if (!aggregatedData) throw new Error("集計データがありません");

    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = spreadsheet.getSheetByName('Survey Results');
    if (!sheet) {
      sheet = spreadsheet.insertSheet('Survey Results');
    } else {
      sheet.clear(); // 既存のデータをクリア
    }

    sheet.getRange(1, 1).setValue('質問');
    sheet.getRange(1, 2).setValue('回答');
    sheet.getRange(1, 3).setValue('カウント');

    var row = 2;  // データを挿入する開始行を指定

    for (var question in aggregatedData) {
      var answers = aggregatedData[question];

      for (var answer in answers) {
        var count = answers[answer];

        sheet.getRange(row, 1).setValue(question);
        sheet.getRange(row, 2).setValue(answer);
        sheet.getRange(row, 3).setValue(count);

        row++;
      }
    }
  } catch (e) {
    Logger.log("Error: " + e.message);
  }
}

このスクリプトは、集計されたデータをSurvey Resultsシートに書き込みます。各質問に対して回答とそのカウントを記載することで、視覚的に結果を確認できるようになります。

5. GASでのエラーハンドリング

GASでの一般的なエラーとその対処法について説明します。例えば、フォームが見つからない場合や、データが不足している場合など、さまざまなエラーが発生する可能性があります。これらのエラーを適切にハンドリングすることで、スクリプトの安定性と信頼性を向上させることができます。

function aggregateSurveyResults() {
  try {
    var form = FormApp.getActiveForm();
    if (!form) throw new Error("アクティブなフォームが見つかりません");

    var responses = form.getResponses();
    var aggregatedData = {};

    responses.forEach(function(response) {
      var itemResponses = response.getItemResponses();

      itemResponses.forEach(function(itemResponse) {
        var question = itemResponse.getItem().getTitle();
        var answer = itemResponse.getResponse();

        if (!aggregatedData[question]) {
          aggregatedData[question] = {};
        }

        if (!aggregatedData[question][answer]) {
          aggregatedData[question][answer] = 0;
        }

        aggregatedData[question][answer]++;
      });
    });

    return aggregatedData;
  } catch (e) {
    Logger.log("Error: " + e.message);
  }
}

このスクリプトは、フォームが見つからない場合やその他のエラーが発生した場合にエラーメッセージを記録します。これにより、スクリプトの動作中に何か問題が発生した場合でも、その原因を特定しやすくなります。

6. GASの応用

GASの基本的な使い方をマスターしたら、次は応用編です。例えば、以下のような応用が可能です。

メール通知機能の追加: 集計結果をメールで自動送信する。

function sendAggregatedDataByEmail() {
  try {
    var aggregatedData = aggregateSurveyResults();
    if (!aggregatedData) throw new Error("集計データがありません");

    var emailBody = "アンケート結果:\n\n";

    for (var question in aggregatedData) {
      var answers = aggregatedData[question];
      emailBody += question + ":\n";
      for (var answer in answers) {
        emailBody += "  " + answer + ": " + answers[answer] + "\n";
      }
    }

    MailApp.sendEmail("recipient@example.com", "アンケート結果", emailBody);
  } catch (e) {
    Logger.log("Error: " + e.message);
  }
}

このスクリプトは、集計結果をメール本文にまとめて送信します。これにより、集計結果を関係者に迅速に共有することができます。

まとめ

以上、GASを活用したアンケート結果の自動集計とスプレッドシートへの反映について説明しました。GASを活用することで、業務の効率を大幅に向上させることができます。特にエラーハンドリングを適切に行うことで、スクリプトの信頼性を高めることができます。また、GASの応用例として、メール通知機能や外部APIとの連携を紹介しました。これにより、さらに高度な自動化が可能となり、業務の効率化に大いに役立つでしょう。この記事が、あなたのビジネスにおけるデータ分析や報告書作成の効率化に役立つことを願っています。

この記事が気に入ったらサポートをしてみませんか?