Edited at

Google Formsで「その他」の回答があると次回の選択肢に追加するGoogle Apps Script(GAS)

インフラ屋なのでGAS初心者で、JavaScript初心者です。

グーグルフォームを使ったアンケートで「その他」を入れておくと選択式の質問に記述式の選択肢が表れます。

フォームに回答があった時をトリガーにして下記のスクリプトを走らせると、「その他」で書かれた回答が次回から選択肢に追加されるので手書きする必要がなくなる、そんな内容です。

悪意を持った回答者がいない環境で使いましょう。その他にでたらめな文字を入れて回答すると再現なく選択肢が増えてどんどん荒れていくので使う場面には注意が必要です。

見よう見まねで書いてみてこれで追加できるようになりました。


スクリプトの内容

1/11追記 スクリプトを手直ししました。違う型同士で比較してたからif文が機能してなかったっぽい。

これで自分なりに思っていた動作をする、無駄がない感じの文になりました。

function AddChoice() {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("フォームの回答 1");
var form = FormApp.openById("自分のIDで置き換える。URLの中に書かれている長い文字列です");
var title = "○○は?"; //ここに対象の質問文を入れる
//対象の質問を探す
var items = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE);
for (var i = 0; i < items.length; i++){
if (items[i].getTitle()== title){
var question = items[i].asMultipleChoiceItem()
break;
}
}
var choices = question.getChoices();
//1行目から質問文と同じ列を探して、その列の最終行の回答を探す
for (var i = 1; i <= sheet.getLastColumn(); i++){
if (sheet.getRange(1, i).getValue() == title){
var newchoice = sheet.getRange(sheet.getLastRow() , i).getValue()
break;
}
}
//対象の回答が選択肢の中に既にあるか比べてあったら終わる
for (var i = 0; i < choices.length; i++){
if (choices[i].getValue() == newchoice){
return;
}
}
//選択肢の最後に追加する
choices.push(question.createChoice(newchoice));
question.setChoices(choices);
}


トリガーの設定

回答があるとこのスクリプトが実行されるように仕込みます。

1. スクリプトエディタのメニューの「編集」ー「現在のプロジェクトのトリガー」

2. 右下にある「トリガーの追加」

3. 「イベントの種類を選択」を「フォーム送信時」にして、「保存」します。

その他を使って回答して、「別の回答を送信」(次回以降)で項目が増えていれば成功です。


参考文献

ありがとうございます。

https://developers.google.com/apps-script/reference/forms/form

https://tonari-it.com/gas-form-add-items/

https://tonari-it.com/gas-form-generate-choices/

https://teratail.com/questions/45539

https://qiita.com/Gunsei_Paseri/items/2245a10a31b26b68953f

https://takakisan.com/gas-form-send-email-tutorial/

https://www.genius-web.co.jp/blog/cat-118/gasskip.html