質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

379閲覧

Google Form 修正されるまでは回答の完了をさせないようにしたい。

jailbh

総合スコア12

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2023/06/26 14:36

実現したいこと

Google Formの回答ページを作る際に、
回答者に同じ情報を続けて2回入力させて、その2つの入力内容が相違した時に、エラーメッセージを表示させて、
それが修正されるまでは回答の完了をさせないようにしたい。
例えば電話番号を入れさせる際に、2回同じものを入力させて、その2つに相違があれば入れ間違いだと表示したい。

前提

ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

そもそもGoogle Formのフォーム開発ツールの標準機能にはこの機能が無いらしく、scriptなどで対応するしかないらしい。

試したこと

ChatGPTで以下の質問をしたところ、いくつかの回答を得たが、どれを試してもNGであった。
そもそも回答に書かれたオプションが存在しない。
また、scriptを工夫すればできそうな感触はあるが、そもそもscriptを実装した経験が無くて、
正しい実装方法が確立できない。

ChatGPTに質問した内容
「google formを使用して同じ内容を2回入力させて、かつその2つが同じ綴りである場合にのみokとするフォームを作成できますか」
回答1

申し訳ありませんが、私は実際のソフトウェアやサービスにアクセスすることができないため、具体的な機能の有無や設定方法について確認することはできません。Google フォームに関する最新の機能やオプションについては、公式のドキュメントやGoogle フォーラムなどを参照してください。 ただし、一般的なアイデアとして、Google フォームのスクリプトエディタを使用して、特定の要件を満たすためのカスタムスクリプトを作成することができる可能性があります。Google Apps Script を使用して、フォームの送信時に2つの回答を比較し、同じ綴りである場合にのみフォームを受け付けるように制約を追加することができます。 ただし、このようなカスタムスクリプトの作成には、JavaScript や Google Apps Script の基本的な知識やプログラミングスキルが必要となる場合があります。Google Apps Script の使用方法やフォームの操作に関する詳細な情報を提供することはできませんが、公式のドキュメントやオンラインのリソースが利用できるかと思います。 もし、Google フォームのカスタマイズや特定の要件の実現に困難を感じる場合は、Google サポートや開発者コミュニティに相談することをおすすめします。彼らはより具体的なガイダンスやサポートを提供することができます。 申し訳ありませんが、Google フォームのデフォルト機能では、同じ内容を2回入力させ、かつその2つが同じ綴りである場合にのみフォームを受け付けるような設定を直接行うことはできません。 ただし、Google フォームにはカスタムスクリプトを組み込むことができます。以下に、Google Apps Script を使用して同じ内容を2回入力し、その2つが同じ綴りである場合にのみフォームを受け付ける方法の一例を示します。 Google フォームを作成し、質問を追加します。 Google フォームの編集画面で、「スクリプトエディタ」を開きます。 スクリプトエディタで、以下のようなスクリプトを作成します:

javascript

1function validateForm(e) { 2 var response = e.response; 3 var itemResponses = response.getItemResponses(); 4 5 if (itemResponses.length >= 2) { 6 var firstResponse = itemResponses[itemResponses.length - 2].getResponse(); 7 var secondResponse = itemResponses[itemResponses.length - 1].getResponse(); 8 9 if (firstResponse !== secondResponse) { 10 var form = FormApp.getActiveForm(); 11 form.setAcceptingResponses(false); 12 throw new Error("同じ内容を2回入力してください。"); 13 } 14 } 15}
スクリプトエディタで、「トリガー」(時計のアイコン)をクリックし、新しいトリガーを作成します。トリガーを設定して、フォームの送信時に「validateForm」関数が実行されるようにします。 これにより、フォームが送信された際に、最後の2つの回答が同じ綴りであるかどうかをチェックし、異なる場合にフォームを受け付けないようにします。 なお、このスクリプトは一例であり、実際の要件に合わせてカスタマイズする必要があります。また、正確な実装方法や詳細な手順については、Google Apps Script のドキュメントや開発者コミュニティを参照してください。

回答2

Google フォームにアクセスします。 質問の追加ボタン(+)をクリックして、テキスト入力欄の質問を追加します。 質問の設定アイコン(歯車のアイコン)をクリックして、質問の設定を開きます。 「回答の種類」を「テキスト」に設定します。 「2 つ目の回答を要求」オプションを有効にします。これにより、同じ内容を2回入力するようになります。 「回答の検証」オプションを有効にします。 「正規表現」を選択します。 「正規表現パターン」には、以下の正規表現を入力します:^(.*)$ (この正規表現は、入力されたテキストが任意の文字列であることを表しています) 「2 つ目の回答と比較する」オプションを有効にします。 「同じである場合」を選択します。 「必須にする」オプションを有効にします。 質問の設定を保存します。 他の質問やフォームの設定を追加して、フォームを完成させます。 フォームの共有方法を選択し、必要な場合は回答者にフォームへのアクセス権を提供します。

→ 「「2 つ目の回答と比較する」オプションを有効にします。」とあるが、そのようなオプションは存在しない

その他、いくつも"Regenerate response"で他の回答を得たが、存在しないオプションばかり出てくる。

この場でChatGPTの評価をするつもりはないが、第一希望はフォーム作成時の何らかのオプションで実現、第二希望はscriptで解決です。
あまり込み入った機能を要求している認識はないのですが、どなたかこの実装に成功した方のknowledgeを共有させていただけませんでしょうか。

#該当するソースコード

ps

1一例(ただし、実装の方法がわからない) 2function onFormSubmit(e) { 3var form = FormApp.getActiveForm(); 4var responses = form.getResponses(); 5var response = responses[responses.length - 1]; 6var itemResponses = response.getItemResponses(); 7 8var firstResponse = itemResponses[0].getResponse(); 9var secondResponse = itemResponses[1].getResponse(); 10 11if (firstResponse == secondResponse) { 12// OK 13} else { 14// 同じ綴りではない場合の処理 15var formResponse = form.createResponse(); 16var items = form.getItems(); 17for (var i = 0; i < items.length; i++) { 18var item = items[i]; 19formResponse.withItemResponse(item.asTextItem().createResponse("")); 20} 21formResponse.submit(); 22} 23}

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

この回答はGPT-4による自動生成回答です

Googleフォームの標準機能では、同じ内容を2回入力させて、その2つが同じ綴りである場合にのみ回答を受け付けるような設定はできません。しかし、Google Apps Scriptを使用して、この機能を実現することができます。

以下に、Google Apps Scriptを使用して、同じ内容を2回入力し、その2つが同じ綴りである場合にのみフォームを受け付ける方法の一例を示します。

  1. Googleフォームを作成し、質問を追加します。2つの質問を作成し、それぞれに同じ内容を入力させるようにします。

  2. Googleフォームの編集画面で、「その他」(3つの点のアイコン)をクリックし、「スクリプトエディタ」を開きます。

  3. スクリプトエディタで、以下のようなスクリプトを作成します:

javascript

1function onFormSubmit(e) { 2 var itemResponses = e.response.getItemResponses(); 3 4 var firstResponse = itemResponses[0].getResponse(); 5 var secondResponse = itemResponses[1].getResponse(); 6 7 if (firstResponse !== secondResponse) { 8 // 同じ綴りではない場合の処理 9 // ここでエラーメッセージを表示する方法はGoogleフォームでは提供されていませんが、 10 // 代わりに回答者にメールで通知することができます。 11 var userEmail = e.response.getRespondentEmail(); 12 var subject = "入力エラー"; 13 var body = "入力された2つの内容が一致しませんでした。再度フォームにアクセスして、正しい情報を入力してください。"; 14 MailApp.sendEmail(userEmail, subject, body); 15 16 // また、回答を削除することもできます。 17 var form = FormApp.getActiveForm(); 18 var responses = form.getResponses(); 19 var lastResponse = responses[responses.length - 1]; 20 form.deleteResponse(lastResponse.getId()); 21 } 22}
  1. スクリプトエディタで、「トリガー」(時計のアイコン)をクリックし、新しいトリガーを作成します。トリガーを設定して、フォームの送信時に「onFormSubmit」関数が実行されるようにします。

これにより、フォームが送信された際に、2つの回答が同じ綴りであるかどうかをチェックし、異なる場合に回答者にメールで通知し、回答を削除するようになります。

ただし、この方法ではエラーメッセージを直接フォーム上に表示することはできません。また、このスクリプトは一例であり、実際の要件に合わせてカスタマイズする必要があります。

投稿2023/06/26 14:37

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問