2024年現在も、法人個人を問わず、予約フォームやお問い合わせフォームにGoogleフォームを利用されている企業は多いですね(大手企業は自前のWebフォームがほとんどかと思いますが)。
無料でノーコードですぐにセットアップできるので便利ではありますが、手が届かない痒い箇所も少なくありません。
例えばその一つが日付フィールドです。デフォルトのカレンダータイプの日付フィールドでは、以下のような短所が挙げられます。
・日付を決定するまでのアクション数が多い
・制限を施せない(例えば過去の日付や休日も選択できてしまう)
こういった点を踏まえた時に、予約用の日付フィールドとして利用するにはやや不安ですよね。
そのような場合には、GAS(Google Apps Script)で、下記のような自動更新される日付のプルダウンフィールドを用意する方法があります。
私が作成したサンプルコードの主な仕様は以下の通りです。
<利点>
・Googleフォームの複数の設問フィールドに対応
・yyyy/MM/dd(曜日) 表示で見やすい
・nonReservationDates に予約不可日を設定可能
<サンプルコードの仕様>
・予めGoogleフォームに「第一希望日」「第二希望日」等のプルダウンフィールドを用意しておく
・nonReservationDates に yyyy/MM/dd 形式で予約不可日を追記
サンプルコードをカスタマイズすればかなり便利にご利用いただけるかと思いますので、ぜひ、ご自由にお使いください!
※ご質問にはお答えできませんので予めご承知おきくださいませ。
Googleフォームイメージ

コード
function updateDateChoices() {
const form = FormApp.openById("Googleフォームの編集ページID");
const items = form.getItems();
let dateField01 = null;
let dateField02 = null;
// 設問タイトルが一致するフィールドが対象
for (let i = 0; i < items.length; i++) {
if (items[i].getTitle() === "第一希望日") {
dateField01 = items[i];
} else if (items[i].getTitle() === "第二希望日") {
dateField02 = items[i];
}
}
createItem(dateField01);
createItem(dateField02);
}
function createItem(item) {
const today = new Date();
const dayOfWeekArray = ["日", "月", "火", "水", "木", "金", "土"];
const nonReservationDates = [
"2024/05/01",
"2024/05/02",
"2024/05/03",
];
// プルダウンに設定する日付のリスト
const dateList = [];
for (let i = 0; i <= 60; i++) { // 60日分の日付を生成
const date = new Date();
date.setDate(today.getDate() + i);
if (!nonReservationDates.includes(Utilities.formatDate(date, 'JST', 'yyyy/MM/dd'))) {
dateList.push(date);
}
}
// 日付のリストをフォーマットしてプルダウンの選択肢に設定
const choiceValues = dateList.map(date => {
const formattedDate = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd');
const dayOfWeek = dayOfWeekArray[date.getDay()];
return `${formattedDate}(${dayOfWeek})`;
});
item.asListItem().setChoiceValues(choiceValues);
}
トリガー設定
対象関数:updateDateChoices
「時間手動型」から「日付ベースのタイマー」で毎日1回実行されるように設定してください。