今年(2018年)の1月1日は月曜日だったことから、
私のやりたいことが伝わりづらい気がするので、2017年を例にします。
2017年1月の1回目の月曜日は2日です。
月曜日始まり日曜日終わりを1セットととらえて、
2017年1月1日を含む週となると、2016年12月26日~2017年1月1日となります。
このときの、「2016年12月26日」という日付を取得するには、
どのような条件を作れば取得できるでしょうか。
考えてみたのですが、なにも閃きませんでした。
もしよかったら、アイデアをいただけると嬉しいです。
よろしくお願いします。
追記
GASを書いてみましたがエラーが出ます。。
javaScript
1function seireki() { 2 // 変更のあったシート 3 var ss = SpreadsheetApp.getActiveSpreadsheet(); 4 var sh = ss.getActiveSheet(); 5 6 var val = sh.getRange(1,1).getValue(); 7 var top = sh.getRange(1,2); 8 var date = new Date(val,0,1); 9 var val2 = date.getDay()-1; 10 top.setDate(date.getDate()-val2); 11}
実行トランスクリプトには、
「実行に失敗: TypeError: オブジェクト Range で関数 setDate が見つかりません。」
と表示されます。
ゴールまであともう少しのような気がするのですが…。
#~解決後のまとめ~
kei344さんの回答を参考に解決しましたので、まとめておきます!
対象年の1月1日を基準にすると、その年の初めの月曜日を取得してしまうことがわかったので、
対象年の前の年の12月31日を基準にしてみたところ、期待通りの結果を得ることができました!
2018年のように、1月1日が月曜日の場合だとどうなるか心配でしたが、
試したところ、自動的に年もチェンジされるみたいです。
下記のようなスクリプトが完成しました。
javaScript
1function seireki() { 2 // 変更のあったシート 3 var ss = SpreadsheetApp.getActiveSpreadsheet(); 4 var sh = ss.getActiveSheet(); 5 6 var val = sh.getRange(1,1).getValue(); 7 var top = sh.getRange(1,2); 8 var date = new Date(val-1,11,31); 9 Logger.log(date); 10 var val2 = date.getDay()-1; 11 Logger.log(val2); 12 var date2 = new Date(date.getFullYear(),date.getMonth(),date.getDate()-val2); 13 Logger.log(date2); 14 top.setValue(date2); 15}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/02 00:51
2018/04/02 01:06
2018/04/02 04:01