有料ツール不要!GASで社内アンケート集計を自動化

GASアンケート集計
有料ツール不要!GASで社内アンケート集計を自動化のサムネイル

有料ツール不要!GASで社内アンケート集計を自動化


はじめに:SaaS課金に悩む経営者・フリーランスの皆さんへ

どうも、GASおじです。最近、社内アンケートの集計に毎回手間取って、外部の有料ツールを使うかどうか迷っている人が増えているらしいな。確かに便利だけど、SaaSの月額料金ってバカにならない。

そこでおじさんが提案したいのは、「Google Apps Script(以下GAS)」を使って、自動でアンケート集計を完結させる方法だ。Googleアカウントの利用枠内で動かせるから、追加の専用SaaS料金はかからない。ただしApps Scriptのquotaや実行上限はあるので、その点は注意が必要だ。

この記事では、具体的なコード例を交えつつ、初期設定や必要な権限、個人情報の扱い、トリガー設定、そしてもしもの時の復元方法まで解説する。既存のデータは消さずに、新しい日時付きのシートやファイルに結果を書き出すので安心して使ってくれ。


1. 初期設定と必要権限について

まずはGoogle スプレッドシートにアンケート回答をまとめておこう。たとえば「回答データ」というシート名で、1行目に質問項目、2行目以降に回答が入っているイメージだ。

GASのスクリプトエディタを開き、以下の権限を付与する必要がある。

  • スプレッドシートの読み書き権限
  • ドライブへのファイル作成権限(バックアップ用に新ファイルを作成するため)

これらは初回実行時にGoogleから許可を求められるので、必ず承認してほしい。


2. アンケート集計の自動化コード例

以下は、アンケート回答を集計して新しい日時付きのシートに結果を書き出すサンプルコードだ。

ポイントは、

  • 入力データの存在確認と検証(空行や不正データをスキップ)
  • 集計結果は新規シートに書き出し、既存データは触らない
  • バックアップ用に元データを別ファイルにコピーして保存
  • 実行時のエラーを極力防ぐ設計
function automateSurveyAggregation() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName('回答データ');
  if (!sourceSheet) {
    Logger.log('回答データシートが見つかりません。処理を中止します。');
    return;
  }

  const data = sourceSheet.getDataRange().getValues();
  if (data.length < 2) {
    Logger.log('回答データがありません。処理を中止します。');
    return;
  }

  // バックアップ用にスプレッドシートをコピー
  const backupName = `アンケート回答バックアップ_${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss')}`;
  const backupFile = DriveApp.getFileById(ss.getId()).makeCopy(backupName);
  Logger.log(`バックアップファイルを作成しました: ${backupName}`);

  // 集計処理(例:各質問ごとの回答数をカウント)
  const headers = data[0];
  const responses = data.slice(1);

  // 入力検証:空行は無視
  const validResponses = responses.filter(row => row.some(cell => cell !== ''));

  // 集計結果用オブジェクト(質問ごとに回答の種類と件数を集計)
  const aggregation = {};
  headers.forEach(header => {
    aggregation[header] = {};
  });

  validResponses.forEach(row => {
    row.forEach((answer, idx) => {
      const question = headers[idx];
      if (answer === '') return; // 空なら集計対象外
      aggregation[question][answer] = (aggregation[question][answer] || 0) + 1;
    });
  });

  // 新しい日時付きシートを作成して集計結果を書き込む
  const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
  const resultSheetName = `集計結果_${timestamp}`;
  const resultSheet = ss.insertSheet(resultSheetName);

  // ヘッダー行作成
  resultSheet.appendRow(['質問', '回答', '件数']);

  // 集計結果を行単位で書き込む
  for (const question in aggregation) {
    for (const answer in aggregation[question]) {
      resultSheet.appendRow([question, answer, aggregation[question][answer]]);
    }
  }

  Logger.log(`集計結果シート「${resultSheetName}」を作成しました。`);
}

3. installable triggerの設定方法と復元手順

GASのトリガー機能を使うと、毎日決まった時間やフォームの回答時に自動で集計できる。今回は「時間主導型トリガー」を例に説明する。

  1. スクリプトエディタで「時計マーク(トリガー)」をクリック
  2. 「トリガーを追加」を押す
  3. 関数をautomateSurveyAggregationに設定
  4. イベントの種類を「時間主導型」にし、好きなタイミング(例:毎日午前9時)を選択
  5. 保存する

もしトリガーが誤って削除されたり、スクリプトを更新した場合は、同じ手順で再設定すればOKだ。


4. 個人情報の取扱いと注意点

アンケートに個人情報が含まれる場合は、Google スプレッドシートのアクセス権限管理を徹底しよう。該当ファイルは関係者のみに限定し、外部共有は控えるべきだ。

また、バックアップファイルも同様にアクセス制御を忘れずに。個人情報保護の観点から、不要になったら手動でファイルを削除する運用も考慮しよう。


5. コスト削減の試算例

仮に市販のアンケート集計SaaSを月額3,000円で利用している場合、おじさんのGAS自動化を使えば専用SaaS料金はかからない。Googleアカウントの利用枠内で動くので、

  • 月額コスト削減額 = 3,000円 × 利用月数

ただしApps Scriptの実行回数や時間制限、スプレッドシートのサイズ制限はあるため、大規模データには向かないことを念頭に置いてほしい。


まとめ:GASで賢く社内アンケート集計を自動化しよう

GASを使えば、追加の専用SaaS料金なしでアンケート集計の手間を大幅に減らせる。既存データの削除や変更はせず、新規の日時付きシートに結果を出力。バックアップも自動で取るから安心だ。

初期設定やトリガーのセットアップは少しだけ手間だが、一度やれば毎回の手作業から解放されて時間もコストも節約できる。

気になったらぜひ試してみてほしい。もっと便利なGASツールを探すなら、

GASおじラボで500ツール使い放題 →

で待ってるぞ!