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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

Q&A

解決済

2回答

143閲覧

【GAS/スプシ】時刻の比較を使って記入するべき行を判断して表示させる方法

shauladrop

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google Apps Script

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

0グッド

0クリップ

投稿2024/04/12 05:16

実現したいこと

1日のスケジュール表を作っています。

一覧シートには、
・予定のタイトル
・開始時刻(例:2024/4/1 9:00:00)
をヘッダーにした表があります。

スケジュール表シートには
・30分刻みの時刻(上のセル+"0:30")の列
・予定のタイトルを入れたい空欄列
があります。

一覧シートに書き出してある予定のタイトルを、スケジュール表シートの該当する時間の行に書き込む、という動作がしたいです。

発生している問題・分からないこと

調べながら自力でコードを書いてみて実行してみましたが、実行エラーは出なかったものの、スケジュール表への書き込みは全くされていませんでした。
書き方が間違っているのか、そもそも組み立て方が違うのか、わかりません。

詳しい方のアドバイス、よろしくお願いします。

イメージ説明
イメージ説明

該当のソースコード

GAS

1//インプットシートの予定を該当する開始時間のセルへ振り分ける 2function scheduleSetting() { 3 var spreadsheetID = SpreadsheetApp.getActiveSpreadsheet().getId(); 4 5 var dataSheetName = 'datasheet'; 6 var displaySheetName = 'Today'; 7 8 var sheet = SpreadsheetApp.openById(spreadsheetID).getSheetByName(dataSheetName); 9 //行の定義 10 var lastRow = sheet.getLastRow(); 11 12 13 for(var i = 2; i <= lastRow; i++){ 14 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(dataSheetName); 15 //記入する予定名を決める 16 var eventName = sheet.getRange(i,1); 17 //記入する予定の開始時刻を取得 18 var startDateString = sheet.getRange(i,2).getValue(); 19 var startDate =new Date(startDateString); 20 for(var j = 7, k = 9; j <=52, k <=54; j+=2, k+=2){ 21 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(displaySheetName); 22 var timeString = sheet.getRange(j,3).getValue(); 23 var timeString2 = sheet.getRange(k,3); 24 var time = new Date(timeString); 25 var time2 = new Date(timeString2); 26 if(time.getTime() <= startDate.getTime() < time2.getTime()){ 27 sheet.getRange(j,4).setValue(eventName); 28 } 29 } 30 31 } 32 33}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

時刻の比較ができていなかったので調べて直しましたが、結果は変わらずでした。

Googleカレンダーを使えば自力でやらなくていいのでは?と思われるかもしれませんが、この一覧シートのデータは共有しているGoogleカレンダーからGASでスプシに移してきています。また、Googleカレンダーにプラスして書きたいことなどがあるので、自力で作っています。

補足

特になし

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

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

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

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

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

guest

回答2

0

時刻だけが記入されたシートから取得した日時は、
年月日が1899年12月30日の時刻として取得されます。

JavaScript

1 var time = new Date(timeString); 2 var time2 = new Date(timeString2);

JavaScript

1 var time = new Date(timeString); 2 time.setFullYear(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()); 3 var time2 = new Date(timeString2); 4 time2.setFullYear(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());

のように修正して年月日を合わせてから比較してはどうでしょうか。

投稿2024/04/12 05:50

YellowGreen

総合スコア731

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

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

YellowGreen

2024/04/12 05:59 編集

方法としては、YAmaGNZ様の回答との合わせ技でしょうか。 比較の主体を左辺に置く書き方をすると、 if(startDate.getTime() >= time.getTime() && startDate.getTime() < time2.getTime()){ のように書くことになるでしょうか。
shauladrop

2024/04/12 10:15

ご回答ありがとうございます! 時刻の扱い方がよくわかっていなかったので、とても助かりました。
guest

0

ベストアンサー

記述できる数値の比較は2値の比較のみとなります。
例えばa < b < cと記述した場合はbはaより大きくcより小さいかという判断にはなりません。
(a < b) < cとなりa < bの結果(aがbより小さい場合はtrue、aがb以上であればfalse)とcを比較するということになります。
ですからbはaより大きくcより小さいかという判断をするばあいは(a < b) && (b < c)といった感じで記述しなくてはいけません。

ですからif(time.getTime() <= startDate.getTime() < time2.getTime())といった記述は期待している判断にはなっていないのではないでしょうか

投稿2024/04/12 05:44

YAmaGNZ

総合スコア10296

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

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

shauladrop

2024/04/12 10:14

ご回答ありがとうございます! && の表記になることは存じておりませんでしたので、大変助かりました。 無事に反映させることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問