ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
Googleフォームのデザインを自由に変更する方法「上級者向け」
あなたが今まで使っていたフォームのデザインでGoogleフォームが使用できます。
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- Googleフォームのプルダウンの項目をスプレッドシートから読み込んで、追加することができます。
- GASって何?状態であってもコピペでできます。
逆に、知らないと
Googleフォームのプルダウンに
たくさん項目を追加する際に、チンタラチンタラ1項目ずつ、
手作業で追加する状態が続きます。
なので、サクッとマスターして
と言ってあげてください
最新版(『名前付き範囲』で読み込む方法)はこちら↓
Googleフォームにスプレッドシートから項目を追加する方法(コピペでできる!)
動画はこちら
サンプルシート
スクリプト
const FORMID = '******************************************' //① GoogleフォームのID
const ITEMNAME = '項目名' //② 項目のタイトル
const SHEETNAME = 'シート1' //③ 読み込むシート名
/**
* Googleフォームのプルダウンリストに項目を追加する
*/
function AddGoogleFormsListItem() {
const form = FormApp.openById(FORMID)
const items = form.getItems()
const section = choiceValues()
console.log(section)
//デバック用Google Formsの質問名と、IDを取得
for (let i = 0; i < items.length; i++) {
const item = items[i]
const itemName = item.getTitle()
const itemId = item.getId()
console.log(`質問名 ${itemName}, \n質問のID ${itemId}`)
//スプレッドシートのシェアハウスDBから内容を読み取って、Formの項目を更新する。
if (itemName == ITEMNAME) {
items[i].asListItem().setChoiceValues(section)
}//if
}//for
}//end
//Googleシートから、プルダウンリストの選択肢を取得する
function choiceValues() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEETNAME)
const lastRow = sheet.getLastRow()
const values = sheet.getRange(1, 1, lastRow, 1).getValues()
values.shift()
return values
}
上記シートの上から3行、GoogleフォームのID、項目のタイトル、読み込むシート名を
あなたの環境に合わせて変更してください。
スクリプトの変更する項目
①フォームID
フォームを開いたときのURLの以下の部分をコピーし******************************************
の部分を置換(貼り付け)します。https://docs.google.com/forms/d/1ljV5KSoIEXXXXRAW9AK8aj0i_WFic1SNK5G3rgygvs8/edit
②項目名
プルダウンの項目名を置換します。
③シート名
選択肢を記載したシート名を置換します。
*シートの1行目は読み込みません。
マインドセットします。
マインドセット
プルダウンに5個以上項目がある場合は、スプレッドシートから読み込め
プルダウンに5個以上項目がある場合は、スプレッドシートから読み込め
では、今回のGoogleシートマスターへの究極の方法です。
Step1.
Googleフォームを開く
Step2.
プルダウンの項目を追加する
Step3.
サンプルシートをコピーして開く
Step4.
スクリプトを貼り付ける
Step5.
GoogleフォームのID、項目名、シート名をコピペし動作を確認する
Googleフォームを開く
Step2.
プルダウンの項目を追加する
Step3.
サンプルシートをコピーして開く
Step4.
スクリプトを貼り付ける
Step5.
GoogleフォームのID、項目名、シート名をコピペし動作を確認する
では、早速Googleフォームを開いてください
今すぐです。
最後までご覧いただきありがとうございます。
つぎはこちら
Googleフォームにスプレッドシートから項目を追加する方法(コピペでできる!)
コメント
とてもわかりやすく勉強になります。
超初心者ですが、コードをコピペしてスプレッドシートから項目を追加することができました。
1つ質問なのですが、プルダウンの「回答に応じてセクションに移動」についても同様にスプレッドシートから追加することは可能でしょうか?
可能ですが、その仕組をスプレッドシート上に作るのは、
ちょっと頑張る必要があります。
大変わかりやすくて助かりました。ありがとうございます。
あまりにも初心者で聞くのが恥ずかしいのですが、例えば1つのスプレッドシートを使って複数のフォームに反映させたい場合はどういう風になるのでしょうか。
フォームの内容によりますが、いちばん簡単なのは、
かっこ悪いですが、AddGoogleFormsListItem()関数を
そのままコピペして
newmain(){
AddGoogleFormsListItem()
AddGoogleFormsListItem2()
}
とやれば実現できます。
実際には、AddGoogleFormsListItem(FORMID)とかやりたいところですが、
その辺は中身によりますね。
実際のフォームをご提供いただければ、もう少しクリティカルな回答ができるかもしれません。
とりあえず上記の方法でできました!ありがとうございます!
すばらしい!
1つのフォームで、複数の質問があり、その複数の質問でそれぞれプルダウンにする場合はスクリプトはどこか触る必要があるのでしょうか。
初心者で教えていただけませんでしょうか。
実際にシートをご提供いただければ、的確な回答ができるかもしれません。
大変ありがたい記事で、参考にさせていただきました。
ですが自分でやったところ、スクリプトエディタで次のようなエラーが表示されてしまいました。
↓
エラー
TypeError: Cannot read properties of null (reading ‘getSheetByName’)
choiceValues @ コード.gs:35
AddGoogleFormsListItem @ コード.gs:13
この場合、どのように対処したら良いでしょうか。ご教示願えますと幸いです。よろしくお願いします。
一度もうまく行っていないのであれば、まず動画と同じシート名や項目名で
動画をゆっくり見ながらまったく同じ状態でやってみてください。
こちらのフォームに取り込む方法をたくさん活用させていただき、大変助かっております。
今日もいつものように取り込もうとしたところ、「コード.gs:27」というエラーが出てしまい、実行できませんでした。対処法を教えていただけると幸いです。
それは、27行目がエラーだと言っています。
27行目を修正してください。
あれ?
もしかすると
https://technical.verybestcbp.com/calendertoline/#comment-458
かもしれないですね。
試してみてください。
本当にすみません。私が「チェックボックス」にしてしまっていました。
すぐに返信いただきありがとうございました。これからもたくさん活用させていただきます。
返信ありがとうございます^^
よかったです。
いつも分かりやすい解説ありがとうございます。
日付(1月1日形式)のプルダウンリストを作りたいと思い参考にさせて頂いたのですが、スプレッドシート側は、1月1日となってますが、フォームのリストは、Mon Jan 01 2024 00:00:00 GMT+0900 (Japan Standard Time)となってしまいます。
日付リストを1月1日形式で表示させる場合、また、何らかしらの設定が必要になりますか?
スプレッドシート側の値をシリアル値で受け取るからですね。
なので文字列として表示させる必要があります。いかのいずれかで実現できると思います。
a.文字列で入力する
b.TEXT関数を使って表示させる
c.getValues()をgetDisplayValues()に置き換えてみる
参考
https://technical.verybestcbp.com/gasdocfromspdsp/