前提・実現したいこと
EventInfoSheetの内容に応じて、カレンダー(FortestSheet)にイベント名、イベントタイプ、イベント期間のセールを特定の色に変更したいですが、実行しても何も起きなかったです。
【EventInfoSheet】
イベント詳細を格納するシート
【FortestSheet】
別の関数で3列目から1行目に月、2行目に日付(表示形式はdd)、3行目に曜日を出力させています。
該当のソースコード
GAS
1function myFunction() { 2 const FortestSheet = SpreadsheetApp.getActive().getSheetByName("fortest"); 3 const EventInfoSheet = SpreadsheetApp.getActive().getSheetByName("EventInfo"); 4 const EventInfoValues = EventInfoSheet.getDataRange().getValues(); 5 var LastCol = FortestSheet.getLastColumn()-2; 6 var ValueList=[]; 7 8 for(var i=0;i<EventInfoValues.length;i++){ 9//タイトル行及びイベント名が空欄のデータを排除 10 if(EventInfoValues[i][0]!="イベント名" && EventInfoValues[i][0]!=""){ 11 var TestList = []; 12 TestList.push(EventInfoValues[i][0]); 13 TestList.push(EventInfoValues[i][1]); 14 TestList.push(EventInfoValues[i][2]); 15 TestList.push(EventInfoValues[i][3]); 16 ValueList.push(TestList); 17 } 18 } 19for(var y=0;y<ValueList.length;y++){ 20 21var StartDate = ValueList[y][2]; 22var StartDate = Utilities.formatDate(StartDate, 'Asia/Tokyo', 'MM/dd'); 23var EndDate = ValueList[y][3]; 24var EndDate = Utilities.formatDate(EndDate, 'Asia/Tokyo', 'MM/dd'); 25 26for(var z=0;z<LastCol;z++){ 27//最終列までセールごとに日付判定 28var CheckDate = FortestSheet.getRange(2,3+z).getValue(); 29//条件をCheckDate == StartDateに変更して見ましたが、それでも色は設定しなかったです 30if(CheckDate >= StartDate && CheckDate<=EndDate){ 31 32FortestSheet.getRange(3,4+y).setBackground("blue"); 33 34} 35} 36} 37} 38
FortestSheetに日付を一括出力する関数
GAS
1 const SetCalenderByRealseDate=()=> { 2 const TestSheet = SpreadsheetApp.getActive().getSheetByName("fortest"); 3 const realseDate = SpreadsheetApp.getActive().getSheetByName("Date").getRange("A2").getValue(); 4 var LastCol = TestSheet.getLastColumn()-2; 5 var month=[]; 6 var SetDay=[]; 7 var SetDate=[]; 8 CountEndDate(realseDate,SetDay,SetDate,month,LastCol); 9 10 for(var y = 0;y<SetDay.length;y++){ 11 TestSheet.getRange(1,3+y).setValue(month[y]); 12 TestSheet.getRange(2,3+y).setValue(SetDate[y]); 13 TestSheet.getRange(3,3+y).setValue(SetDay[y]); 14 } 15 } 16 17 const CountEndDate=(realseDate,SetDay,SetDate,month,LastCol)=>{ 18 const YobiList= ["日", "月", "火", "水", "木", "金", "土"]; 19 var StartDate = new Date(realseDate.setDate(realseDate.getDate()-1)); 20 for(var i=0;i<LastCol;i++){ 21 var CountDate = new Date(StartDate.setDate(StartDate.getDate()+1)); 22 var Yobi = CountDate.getDay(); 23 var monthDate = Utilities.formatDate(CountDate, 'Asia/Tokyo', 'MM'); 24//CheckDateは月の初めであるかを判定するため 25 var CheckDate = Utilities.formatDate(CountDate, 'Asia/Tokyo', 'd'); 26 var CountDate = Utilities.formatDate(CountDate, 'Asia/Tokyo', 'MM/dd'); 27 var CountYobi = YobiList[Yobi]; 28 //一回目は月を配列に格納、それ以降は1日のみ月を格納し、他は空欄で出力 29 if(i==0){ 30 month.push(monthDate); 31 } 32 else if(i!=0 && CheckDate==1){ 33 month.push(monthDate); 34 } 35 else { 36 month.push(""); 37 } 38 SetDate.push(CountDate); 39 SetDay.push(CountYobi); 40 } 41 } 42
GAS
1//開始日や終了日のデータ形式につきまして、下記の関数の実行LOGを追記します 2function myFunction() { 3 const FortestSheet = SpreadsheetApp.getActive().getSheetByName("fortest"); 4 const EventInfoSheet = SpreadsheetApp.getActive().getSheetByName("EventInfo"); 5 const EventInfoValues = EventInfoSheet.getDataRange().getValues(); 6 var LastCol = FortestSheet.getLastColumn()-2; 7 var ValueList=[]; 8 9 for(var i=0;i<EventInfoValues.length;i++){ 10 if(EventInfoValues[i][0]!="" && EventInfoValues[i][0]!=""){ 11 var TestList = []; 12 TestList.push(EventInfoValues[i][0]); 13 TestList.push(EventInfoValues[i][1]); 14 TestList.push(EventInfoValues[i][2]); 15 TestList.push(EventInfoValues[i][3]); 16 ValueList.push(TestList); 17 } 18 } 19 Logger.log(ValueList); 20 } 21 22/*Log ※if(EventInfoValues[i][0]!="" && EventInfoValues[i][0]!="")にすると、タイトル行が出力されてしまいます 23[20-04-17 12:31:01:089 JST] [[イベント名, タイプ, 開始日, 完了日], [イベントA, イベントミッション, Sat Apr 04 00:00:00 GMT+09:00 2020, Fri Apr 24 00:00:00 GMT+09:00 2020], [イベントB, イベントステージ, Sun Apr 05 00:00:00 GMT+09:00 2020, Wed Apr 15 00:00:00 GMT+09:00 2020], [イベントC, イベントミッション, Mon Apr 06 00:00:00 GMT+09:00 2020, Wed Apr 08 00:00:00 GMT+09:00 2020], [イベントD, イベントステージ, Tue Apr 07 00:00:00 GMT+09:00 2020, Sat Apr 11 00:00:00 GMT+09:00 2020], [イベントE, イベントミッション, Fri Apr 10 00:00:00 GMT+09:00 2020, Tue Apr 14 00:00:00 GMT+09:00 2020]] 24*/ 25
その図のどっちがどっちのシートかは明示したほうがいいと感じました。コード読んで処理読めば理解できるやろ、というのは不親切で回答者を遠ざける行為な気がします。
回答2件
あなたの回答
tips
プレビュー