GASでフォーム入力候補をスプレッドシートから自動補完

GASでフォーム入力候補をスプレッドシートから自動補完

記事
IT・テクノロジー
こんにちは、GASおじです。今回は、Googleフォームの入力候補をスプレッドシートのデータから自動で補完する方法について解説するよ。中小企業の経営者さんやフリーランスの方々にとって、手間を減らしつつコストを抑えるアイデアとして参考になればうれしいね。

フォームの入力候補って、手動で設定すると意外と面倒だし、データが増えるたびに更新しないといけない。そこで、GAS(Google Apps Script)を使ってスプレッドシートの最新データを元にフォームの選択肢を自動でアップデートする方法を紹介するよ。

この仕組みはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えるけど、Apps Scriptのquotaや実行上限には注意してね。


■ 仕組みの概要とメリット

Googleフォームの選択肢は「リストから選択」「チェックボックス」「プルダウン」などで設定できるけど、これを手動で編集するのは面倒だ。スプレッドシートに候補データがあるなら、それを直接フォームに反映させることで、

・データの一元管理ができる
・更新の手間を減らせる
・入力ミスや誤記を減らせる
といったメリットがある。GASで自動化すれば、スプレッドシートのデータを編集するだけでフォームの選択肢が更新されるから、運用がラクになるぜ。


■ 初期設定と必要権限

まずは準備するものと設定手順を確認しよう。

・Googleフォームを作成し、選択肢を入れたい項目(例:プルダウン)を用意する
・候補データを管理するスプレッドシートを作成し、候補リストを1列にまとめておく(例:A列に「候補リスト」)
・GASでフォームとスプレッドシート双方にアクセス権限が必要なので、スクリプトエディタから認証を行う
・installable trigger(時間主導型トリガー)を設定して定期的にスクリプトを実行し、フォームの選択肢を最新化できるようにする
権限はスクリプト実行時に「Googleフォームへのアクセス」「スプレッドシートの閲覧・編集」が求められる。処理内容はフォームの質問項目の更新と、スプレッドシートからの読み取りのみなので、個人情報の取り扱いには注意してね。


■ コード例:スプレッドシートからフォームの選択肢を自動補完する

以下は、スプレッドシートの候補データを読み込み、Googleフォームの対象の質問の選択肢を更新しつつ、更新履歴は新しい日時付きのシートに書き出す例だ。

既存のフォームやシートのデータを削除せず、バックアップとロールバックの余地を残すことに気をつけている。また、バッチ書き込み(setChoices)で処理を効率化しているよ。

function updateFormChoicesFromSheet() {
// フォームIDとスプレッドシートIDを設定
const formId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // ここに対象フォームのIDを入れる
const sheetId = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'; // ここに対象スプレッドシートIDを入れる

// フォームとスプレッドを開く
const form = FormApp.openById(formId);
const ss = SpreadsheetApp.openById(sheetId);

// 候補データが入っているシート名とカラム
const dataSheet = ss.getSheetByName('候補リスト');
if (!dataSheet) {
throw new Error('候補リストシートが見つかりません');
}

// データを2行目以降(ヘッダー除く)から取得
const dataRange = dataSheet.getRange(2, 1, dataSheet.getLastRow() - 1, 1);
const values = dataRange.getValues().flat().filter(String); // 空文字除去

if (values.length === 0) {
throw new Error('候補データが空です');
}

// フォームの全質問を取得し、対象の質問を特定(例:タイトルで検索)
const items = form.getItems(FormApp.ItemType.LIST);
const targetTitle = '選択肢項目'; // ここにフォームの質問タイトルを入れる
const targetItem = items.find(item => item.getTitle() === targetTitle);

if (!targetItem) {
throw new Error(`フォームに「${targetTitle}」という質問が見つかりません`);
}

const listItem = targetItem.asListItem();

// バックアップ用に新しい日時付きシートをスプレッドシートに作成
const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss');
const backupSheetName = `backup_${timestamp}`;
const backupSheet = ss.insertSheet(backupSheetName);
backupSheet.getRange(1, 1).setValue('バックアップ日時');
backupSheet.getRange(1, 2).setValue(timestamp);
backupSheet.getRange(2, 1, values.length, 1).setValues(values.map(v => [v]));

// フォームの選択肢を更新(バッチで一括セット)
listItem.setChoices(values.map(v => listItem.createChoice(v)));

Logger.log(`フォームの選択肢を${values.length}件に更新しました。バックアップシート: ${backupSheetName}`);
}


■ installable triggerの設定と復元手順

このスクリプトは定期的に実行したいので、GASの「トリガー」からinstallable triggerを設定しておこう。

・トリガーの種類:時間主導型
・実行間隔:1日1回〜数時間に1回など、お好みで
これにより、スプレッドシートの更新に合わせて自動でフォームの選択肢が最新になる。

もし何か問題が起きたら、バックアップシートを開いて最新の候補リストを取得し、手動でフォームを修正するか、スクリプトを修正して再実行すれば元に戻せる。これが「rollback」の意味だ。大事な既存データは消していないので安心してほしい。


■ コスト削減の考え方

この仕組みは専用のSaaSを使わずに済むから、月額費用を抑えられる。仮にSaaSの選択肢自動補完機能が月額3,000円かかるとしたら、

・年間費用:3,000円 × 12ヶ月 = 36,000円
・GASなら追加費用なし(Googleアカウントの利用枠内で運用)
・ただしApps Scriptのquota・実行上限は考慮必要
手動更新にかかる工数削減効果も加味すれば、かなりのコストメリットが見込める。もちろん、おじさんは無理な課金は勧めないからね。


□ まとめ

・スプレッドシートを入力候補のマスターにしてフォームを自動更新できる
・既存データは削除せず、バックアップを残す安心設計
・installable triggerで自動化しつつ復元も可能
・コストはGoogleアカウントの利用枠内で済み、追加SaaS料金不要(quotaには注意)
・中小企業やフリーランスの現場で、ちょっとした手間とコスト削減に効果的
では、おじさんでした!また次のネタで会おう。

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す