悩める経営者チラシをまいたけど、注文締切日や注文締切時間を守ってくれず
注文が突然来てしまう…
高額な費用をかけてシステム導入もできないけど、何かいい方法ないかな?
そんな方達に向けて記事を作成しました。
私も飲食店勤務だったので、この悩みよくわかります!
注文フォームは、高額なシステムを作らずとも「Googleフォーム」×「Google Apps Script」を使えばある程度は実装できます!
要件としては、とりあえず下記
- 2日前の17時までに注文
- 地区ごとにお届け日が曜日で決まっていて、選択肢の日付を5つ表示(A地区は月曜日、B地区は水曜日など)
- 地区ごとに専用の集計フォームに記載
実装したデモサイトがこちら
https://forms.gle/mxbVpQPHWHuYkTou6
本記事を紹介している北海道・帯広市のホームページ制作、Web制作会社の株式会社ワクタスでは、お客様の発展を第一に考えた最適なWeb戦略をご提案しております。行政や銀行のWeb集客の専門家としても活動しておりますので、ぜひお気軽にお問い合わせください。




Googleフォームで注文フォームを作成するApps Scriptのソース
function updateDate() {
// フォームを指定
let form = FormApp.openById('xxxxxxxxxxxx')
let items = form.getItems();
let delivery_area_a = items[20];
let delivery_area_b = items[24];
let delivery_area_c = items[28];
// 現在の日付情報を取得
let now = new Date(); // now = 2023年3月10日11時4分
let y = now.getFullYear(); // y = 2023
let m = now.getMonth(); // m = 3
let d = now.getDate(); // d = 10
let h = now.getHours(); // h = 11
let days = ['日', '月', '火', '水', '木', '金', '土'];
// 地区ごとのお届け曜日を配列に指定(A地区を月曜、B地区を水曜、C地区を金曜)
let nextWeekday = [
{date: delivery_area_a , delivery_weekday: 1},
{date: delivery_area_b , delivery_weekday: 3},
{date: delivery_area_c , delivery_weekday: 5},
];
// 地区のお届け曜日を更新
nextWeekday.forEach(function(value){
let choices = [];
let orderable = 0;
let date = new Date(y, m, d);
for(let i = 0; i < 5; i++){
if( i == 0) {
// 17時までなら2日後、それ以外なら3日後の日付
if( h <= 16 ) {
orderable = 2;
}else{
orderable = 3;
}
date.setDate(date.getDate() + orderable);
// 最短お届け日時の曜日を取得
let orderableWeekday = date.getDay(); //2日後の曜日 0
// 地区ごとのお届け曜日までの日程算出
let shortest_days = 7 - orderableWeekday + value.delivery_weekday;
// 地区のお届け曜日と現在の最短お届け曜日が一致していれば、加算しない
if( shortest_days == value.delivery_weekday ){
shortest_days = 0;
// 週をまたぐ場合は1週間分を引く
}else if(shortest_days >= 7) {
shortest_days = shortest_days - 7 ;
}
// 現在の日程とお届け先の差を加算する
date.setDate(date.getDate() + shortest_days);
}else {
// 1週間を足す
date.setDate(date.getDate() + 7);
}
let day = date.getDay();
let displayDate = Utilities.formatDate(date, 'Asia/Tokyo', `yyyy年M月d日(${days[day]})`);
choices.push(displayDate);
}
value.date.asListItem().setChoiceValues(choices);
});
}
Googleフォーム側での設定


配達地区Aを選択された方には、配達地区BやCのセクションが出て欲しくないので、条件分岐を設定します。
Apps Scriptの自動実行の設定方法


トリガーで毎日の0時に更新されるよう設定したら、あとは自動実行してくれます!
Apps Scriptのソースで何をやったか解説
では、実際にソースの中で何をやったか解説します。
応用で色々カスタマイズしていただければ!!
まずは初期設定。
フォームを指定し、変更を加えたい値を指定します。(xxxxは皆さんのIDを入力してください)
// フォームを指定
let form = FormApp.openById('xxxxxxxxxxxx')
let items = form.getItems();
let delivery_area_a = items[20];
let delivery_area_b = items[24];
let delivery_area_c = items[28];
form.getItems()はセクションの列番号も含まれるので要注意
現在の日付情報を取得して、配列に入れます。
delivery_weekdayの数字を変更することで簡単に曜日を変更することができます。
// 現在の日付情報を取得
let now = new Date(); // now = 2023年3月10日11時4分
let y = now.getFullYear(); // y = 2023
let m = now.getMonth(); // m = 3
let d = now.getDate(); // d = 10
let h = now.getHours(); // h = 11
let days = ['日', '月', '火', '水', '木', '金', '土'];
// 地区ごとのお届け曜日を配列に指定(A地区を月曜、B地区を水曜、C地区を金曜)
let nextWeekday = [
{date: delivery_area_a , delivery_weekday: 1},
{date: delivery_area_b , delivery_weekday: 3},
{date: delivery_area_c , delivery_weekday: 5},
];
事前準備が終わったら実際の処理に入ります。
5つ候補の日付を表示したいのでfor文で5回転します。
// 地区のお届け曜日を更新
nextWeekday.forEach(function(value){
let choices = [];
let orderable = 0;
let date = new Date(y, m, d);
for(let i = 0; i < 5; i++){
if( i == 0) {
// 17時までなら2日後、それ以外なら3日後の日付
if( h <= 16 ) {
orderable = 2;
}else{
orderable = 3;
}
date.setDate(date.getDate() + orderable);
// 最短お届け日時の曜日を取得
let orderableWeekday = date.getDay(); //2日後の曜日 0
// 地区ごとのお届け曜日までの日程算出
let shortest_days = 7 - orderableWeekday + value.delivery_weekday;
// 地区のお届け曜日と現在の最短お届け曜日が一致していれば、加算しない
if( shortest_days == value.delivery_weekday ){
shortest_days = 0;
// 週をまたぐ場合は1週間分を引く
}else if(shortest_days >= 7) {
shortest_days = shortest_days - 7 ;
}
// 現在の日程とお届け先の差を加算する
date.setDate(date.getDate() + shortest_days);
}else {
// 1週間を足す
date.setDate(date.getDate() + 7);
}
let day = date.getDay();
let displayDate = Utilities.formatDate(date, 'Asia/Tokyo', `yyyy年M月d日(${days[day]})`);
choices.push(displayDate);
}
value.date.asListItem().setChoiceValues(choices);
});
}
Googleフォームの締切時刻を自動にする方法


まとめ
gasは基本がjsなのでなんとかカスタマイズできました!
無料で作れるのはありがたい!
金額の制御や決済ができない点は、うーんですが、ある程度のものだったらgoogleフォームとgasで十分かと思います。
ホームページ制作、Webマーケティングなら北海道・帯広市のワクタスへ




- 札幌市でおすすめのホームページ制作、Web制作会社
- 青森県でおすすめのホームページ制作、Web制作会社
- 宮城県でおすすめのホームページ制作、Web制作会社
- 福島県でおすすめのホームページ制作、Web制作会社
- 茨城県でおすすめのホームページ制作、Web制作会社
- 栃木県でおすすめのホームページ制作、Web制作会社
- 群馬県でおすすめのホームページ制作、Web制作会社
- 埼玉県でおすすめのホームページ制作、Web制作会社
- 千葉県でおすすめホのームページ制作、Web制作会社
- 東京都でおすすめのホームページ制作、Web制作会社
- 神奈川県でおすすめのホームページ制作、Web制作会社
- 新潟県でおすすめのホームページ制作、Web制作会社
- 石川県でおすすめのホームページ制作、Web制作会社
- 福井県でおすすめのホームページ制作、Web制作会社
- 山梨県でおすすめのホームページ制作、Web制作会社
- 長野県でおすすめのホームページ制作、Web制作会社
- 岐阜県でおすすめのホームページ制作、Web制作会社
- 静岡県でおすすめのホームページ制作、Web制作会社
- 愛知県でおすすめのホームページ制作、Web制作会社
- 三重県でおすすめのホームページ制作、Web制作会社
- 滋賀県でおすすめのホームページ制作、Web制作会社
- 奈良県でおすすめのホームページ制作、Web制作会社
- 京都府でおすすめのホームページ制作、Web制作会社
- 大阪府でおすすめのホームページ制作、Web制作会社
- 兵庫県でおすすめのホームページ制作、Web制作会社
- 和歌山県でおすすめのホームページ制作、Web制作会社
- 岡山県でおすすめのホームページ制作、Web制作会社
- 広島県でおすすめホのームページ制作、Web制作会社
- 山口県でおすすめのホームページ制作、Web制作会社
- 徳島県でおすすめのホームページ制作、Web制作会社
- 香川県でおすすめのホームページ制作、Web制作会社
- 愛媛県でおすすめのホームページ制作、Web制作会社
- 高知県でおすすめのホームページ制作、Web制作会社
- 福岡県でおすすめのームページ制作、Web制作会社
- 長崎県でおすすめのホームページ制作、Web制作会社
- 大分県でおすすめのホームページ制作、Web制作会社
- 宮崎県でおすすめのホームページ制作、Web制作会社
- 鹿児島県でおすすめのホームページ制作、Web制作会社
- 沖縄県でおすすめのホームページ制作、Web制作会社












