曜日により書式の変更をしたい
初めて投稿します。
スプレッドシートで、以下のような書式の予定表を作成中です。
3.4.5.行目には、A4の日付を変更すると変わるように関数を組みました。
3行目では平日=0・土=2・日=1・祝=3の数字で、休日判定をしています。
この条件下で、A4のセルに変更が入った時、1.3:赤文字・セルにグレー着色、2:青文字・セルにグレー着色と書式が変わる設定をGASで組みたく腐心しています。
別途、セルに着色する用途もあるため、「条件付き書式」は使えません。
全くのGAS初心者で、本やNETを漁りながら組んではみたのですが、エラーストップはしないものの、書式が変らないので困っています。
ExcelVBAのようにステップインで確認出来ればまだ原因も判りそうな気もしますが、何の反応も無く終了してしまうので、どこが悪いのか・・・・
何方か修正方法を教えて下さいませんでしょうか。
宜しくお願い致します。
A B C D E F G H
3
----------------------------------------------------------------------------
4 2019年1月 | 1月1日 | 1月2日 | 1月3日 | 1月4日 | 1月5日 | 1月6日 | 1月7日 |
-----------------------------------------------------------------
5 | 火 | 水 | 木 | 金 | 土 | 日 | 月 |
----------------------------------------------------------------------------
6 山田一郎 | | | | | | | |
----------------------------------------------------------------------------
7 吉田真一 | | | | | | | |
----------------------------------------------------------------------------
8 鈴木京子 | | | | | | | |
----------------------------------------------------------------------------
9 渡辺 隆 | | | | | | | | ----------------------------------------------------------------------------
function myFunction2() {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var shs = sh.getSheets(); //シート指定
for (var i = 0; i <= 11; i++) { //シート1-12の繰り返し
/**各シートの作業*/
var row = shs[i].getLastRow(); //最下行格納
var col = shs[i].getLastColumn(); //最終列格納
var rng = shs[i].getRange(4,1,row,col); //範囲
var Rng = shs[i].getRange(3,col); //3行目格納
while (Rng<= col){ //最終列まで
var Cr = Rng.getValue(); //参照行
shs.setActiveRange(Rng);
if (shs.getRange(Cr).getValue(2)){
shs.getActiveRangeList(rng).setBackground('#d9d9d9') //セルグレー
.setFontColor('#0000ff')//土=2 青文字
} else if (shs.getRange(Cr).getValue(1)){
shs.getActiveRangeList(rng).setBackground('#d9d9d9') //セルグレー
.setFontColor('#ff0000')//日=1 赤文字
} else if (shs.getRange(Cr).getValue(3)){
shs.getActiveRangeList(rng).setBackground('#d9d9d9') //セルグレー
.setFontColor('#ff0000')//祝=3 赤文字
}
else if (shs.getRange(Cr).getValue(0)){
shs.getActiveRangeList(rng).(activeRangeList !== null) //変更なし
}
}
}
}
追記
PicoSushi様
早速の回答をありがとうございます。
実のところ、最初にgetDayを試したのですが、どうしても開始日が「1899」年から先に進まず頓挫したのです。
以下のコードでA4の日付を反映させることは可能でしょうか?
function myFunction() {
var mySheet = SpreadsheetApp.getActiveSheet(); //シート指定
var rng = mySheet.getRange(4,1).getValue(); //基準年月格納
var myWeekDay = new Array("(日)","(月)","(火)","(水)","(木)","(金)","(土)"); //曜日の表記
var myDay =new Date(rng); //年月指定
var myMonth = myDay.getMonth(); //月の格納
myDay.setDate(2); //開始日は「1」
mySheet.getRange("B4").activate(); //B4から開始
while ( myMonth == myDay.getMonth()) { //myDayに年月が格納されたら
.getFullYear.getMonth()
mySheet.getActiveCell().setValue(myDay.getDate()); //B4に日付を入力して
mySheet.getActiveCell().offset(1,0) //下セルに
.setValue(myWeekDay[myDay.getDay()]); //曜日の入力
mySheet.getActiveCell().offset(0,1).activate(); //右にセル移動
myDay.setTime(myDay.getTime() + 1000 * 60 * 60 * 24);
}
}
追記
上記は、前に1899/12/31~で動いていたのをどうにかしたくて、加工途中で挫折した分でした;;;
思い出しながら動けるようにしたら、今度は1900/1/1~になってしまいます(滝汗)
function myFunction() {
var mySheet = SpreadsheetApp.getActiveSheet(); //シート指定
var rng = mySheet.getRange(4,1).getValue(); //基準年月格納
var myWeekDay = new Array("(日)","(月)","(火)","(水)","(木)","(金)","(土)"); //曜日の表記
var myDay = new Date(rng); //年月指定
var myMonth = myDay.getMonth(); //月の格納
myDay.setDate(2); //開始日は「1」
mySheet.getRange("B4").activate(); //B4から開始
while ( myMonth == myDay.getMonth()) { //myDayに年月が格納されたら.getFullYear.getMonth()
mySheet.getActiveCell().setValue(myDay.getDate()); //B4に日付を入力して
mySheet.getActiveCell().offset(1,0) //下セルに
.setValue(myWeekDay[myDay.getDay()]); //曜日の入力
mySheet.getActiveCell().offset(0,1).activate(); //右にセル移動
myDay.setTime(myDay.getTime() + 1000 * 60 * 60 * 24);
}
}