GASでフォームの自動処理を効率化!MultipleChoiceItem.setTitleで選択肢を動的に更新

GASでフォームの自動処理を効率化!MultipleChoiceItem.setTitleで選択肢を動的に更新

Googleフォームの回答に基づいて、選択肢の内容を自動的に更新したいと思ったことはありませんか?本記事では、Google Apps Script(GAS)のMultipleChoiceItem.setTitle関数を使って、フォームの選択肢を動的に変更する方法を解説します。特に、定期実行される自動化処理の中で、スプレッドシートのデータに基づいてフォームの選択肢を更新する具体的な例を紹介します。

MultipleChoiceItem.setTitleとは?

MultipleChoiceItem.setTitleは、Googleフォームの複数選択式質問項目のタイトル(選択肢)を設定または変更するために使用されるGASの関数です。この関数を使うことで、フォームの選択肢を固定的なものではなく、外部データや条件に基づいて動的に変更することができます。

基本的な使い方

この関数は、MultipleChoiceItemオブジェクトに対して使用します。まず、フォームからMultipleChoiceItemオブジェクトを取得し、setTitleメソッドを使って新しいタイトルを設定します。

// フォームを取得
const form = FormApp.openById("フォームID");

// 複数選択式の質問項目を取得(IDで指定)
const item = form.getItemById("質問項目のID").asMultipleChoiceItem();

// 新しい選択肢を設定
item.setTitle("新しい選択肢のタイトル");

利用シチュエーション:定期実行によるフォーム選択肢の自動更新

今回は、スプレッドシートに保存されたデータに基づいて、定期的にフォームの選択肢を更新するシナリオを考えます。例えば、在庫管理システムから最新の在庫状況を取得し、Googleフォームの選択肢として表示することで、常に最新の情報に基づいた回答を収集できます。

業務課題:在庫状況を反映したフォームの自動更新

ある企業では、日々の在庫変動をスプレッドシートで管理しています。この在庫情報を基に、Googleフォームで商品の注文を受け付けていますが、手動でフォームの選択肢を更新する必要があり、非常に手間がかかっていました。この課題を解決するために、GASを使ってスプレッドシートのデータに基づいてフォームの選択肢を自動更新します。

実装方法

  1. スプレッドシートから在庫データを取得します。
  2. 取得した在庫データを基に、フォームの選択肢を生成します。
  3. MultipleChoiceItem.setTitleを使って、フォームの選択肢を更新します。
  4. GASのトリガーを設定し、定期的にスクリプトを実行します。

コード例

例1:スプレッドシートのデータに基づいてフォームの選択肢を更新

function updateFormChoices() {
// スプレッドシートのID
const spreadsheetId = "スプレッドシートID";
// シート名
const sheetName = "在庫データ";
// フォームのID
const formId = "フォームID";
// 質問項目のID
const itemId = "質問項目のID";

// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);

// データの範囲(A列の2行目から最終行まで)
const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1);
// 選択肢の配列を作成
const choices = range.getValues().flat();

// フォームを開く
const form = FormApp.openById(formId);
// 質問項目を取得
const item = form.getItemById(itemId).asMultipleChoiceItem();

// 選択肢を更新
item.setChoiceValues(choices);

Logger.log("フォームの選択肢を更新しました。");
}

このコードは、指定されたスプレッドシートのA列にあるデータを読み込み、それをフォームの選択肢として設定します。flat()メソッドを使って二次元配列を一次元配列に変換している点に注意してください。

例2:在庫数が0の商品を選択肢から除外する

在庫数が0の商品は、フォームの選択肢に表示しないようにします。

function updateFormChoicesWithStockCheck() {
// スプレッドシートのID
const spreadsheetId = "スプレッドシートID";
// シート名
const sheetName = "在庫データ";
// フォームのID
const formId = "フォームID";
// 質問項目のID
const itemId = "質問項目のID";
// 商品名がある列(A列)
const productNameColumn = 1;
// 在庫数がある列(B列)
const stockQuantityColumn = 2;

// スプレッドシートを開く
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getSheetByName(sheetName);

// データの範囲(2行目から最終行まで、商品名と在庫数の列)
const lastRow = sheet.getLastRow();
const range = sheet.getRange(2, 1, lastRow - 1, 2);
const data = range.getValues();

// 選択肢の配列を作成(在庫数が0より大きい商品のみ)
const choices = data.filter(row => row[stockQuantityColumn - 1] > 0).map(row => row[productNameColumn - 1]);

// フォームを開く
const form = FormApp.openById(formId);
// 質問項目を取得
const item = form.getItemById(itemId).asMultipleChoiceItem();

// 選択肢を更新
item.setChoiceValues(choices);

Logger.log("フォームの選択肢を更新しました(在庫数チェックあり)。");
}

このコードでは、スプレッドシートから商品名と在庫数を取得し、在庫数が0より大きい商品のみを選択肢としてフォームに設定します。filter()メソッドとmap()メソッドを組み合わせて、条件に合致する商品名だけを抽出しています。

よくある問題とトラブルシューティング

  • フォームIDまたは質問項目のIDが間違っている:正しいIDを確認してください。
  • スプレッドシートへのアクセス権がない:スクリプトを実行するアカウントがスプレッドシートへのアクセス権を持っていることを確認してください。
  • 選択肢が更新されない:スクリプトの実行ログを確認し、エラーが発生していないか確認してください。

カスタマイズ方法と応用例

  • 選択肢の表示順をカスタマイズ:スプレッドシートのデータを並べ替えることで、選択肢の表示順を制御できます。
  • 選択肢に説明文を追加:Choiceオブジェクトを使用することで、選択肢に説明文を追加できます。
  • 特定の条件で選択肢を非表示:時間帯やユーザー属性に基づいて、選択肢を動的に変更できます。

まとめ

MultipleChoiceItem.setTitle関数を使うことで、Googleフォームの選択肢を動的に更新し、より柔軟なデータ収集が可能になります。今回の記事では、スプレッドシートのデータに基づいてフォームの選択肢を自動更新する方法を紹介しました。この技術を応用することで、在庫管理、イベント管理、アンケートなど、様々な業務を効率化することができます。

PR

CodeCampは、現役エンジニアからマンツーマンで学べるオンラインプログラミングスクールです。WebデザインやWebサービス開発、転職支援など、目的に合わせた多様なコースが選べます。
朝7時〜夜23時40分まで、365日レッスンが受けられるため、忙しい方でも自分のペースで学習を進めることが可能です。通過率8%の厳しい選考を通過した質の高い講師陣が、あなたのキャリアチェンジを強力にサポートします。
さらに、未経験者向けのカリキュラムや、学習開始から20日以内の全額返金保証制度もあるため、プログラミング学習に不安を感じている方でも安心して始めることができます。

CodeCampで理想の働き方を実現しよう