スプレッドシートで特定の列の8行から最終行までチェックして、それぞれの処理をしています!
function timer() { var Timerss_id = SpreadsheetApp.openById('XXXXX'), Timersheet = Timerss_id.getSheetByName('name'), Timerrange = Timersheet.getActiveRange(), Timerrow = Timerrange.getRow(), Timerclock = Timersheet.getRange("I1"), Timertimeid = Timersheet.getRange("J1"), Timerlast = Timersheet.getLastRow(), Timerday = Utilities.formatDate(new Date(), "JST", "MM/dd"), Timertime = Utilities.formatDate(new Date(), "JST", "H:mm"), Timeridday = Utilities.formatDate(new Date(), "JST", "MMdd"), Timeridtime = Utilities.formatDate(new Date(), "JST", "HHmm"); Timerclock.setValue([Timerday] + ' ' +[Timertime]); Timertimeid.setValue([Timeridday]+[Timeridtime]); for (var i = 8; i <= Timerlast ; i++) { Timerbase1 = Timersheet.getRange(i, 3) Timerbased1 = Timerbase1.getValue() Timerbased2 = Timersheet.getRange(i,10) Timerid = Timersheet.getRange(i, 11).getValues() if ( Timerbased1 == "時間" ){ Timerbase1.setBackground('#FF0000') }else if ( Timerbased1 == ""){ Timerbase1.setBackground(null) }else{ Timerset1 = Utilities.formatDate(Timerbased1, "JST", "MMddHHmm") Timerbased2.setValue(Timerset1) if (Timerid <= 0) { Timerbase1.setBackground("#FFFFFF") } else if (Timerid <= 15950000) { Timerbase1.setBackground("#FF0000") } else if (Timerid <= 15950070) { Timerbase1.setBackground('#f4a460') } else if (Timerid <= 15950100) { Timerbase1.setBackground('#FFFF00') } else if (Timerid <= 15952000) { Timerbase1.setBackground('#98fb98') } else{ Timerbase1.setBackground('#FFFFFF') } } } }
改良その①
function Ttimer() { var Ttss_id = SpreadsheetApp.openById('xxxx'), Ttsheet = Ttss_id.getSheetByName('name'), Ttrange = Ttsheet.getActiveRange(), Tvalues = Ttsheet.getDataRange().getValues(), //追加コード Ttrow = Ttrange.getRow(), Ttclock = Ttsheet.getRange("I1"), Tttimeid = Ttsheet.getRange("J1"), Ttlast = Ttsheet.getLastRow(), Ttday = Utilities.formatDate(new Date(), "JST", "MM/dd"), Tttime = Utilities.formatDate(new Date(), "JST", "H:mm"), Ttidday = Utilities.formatDate(new Date(), "JST", "MMdd"), Ttidtime = Utilities.formatDate(new Date(), "JST", "HHmm"); Ttclock.setValue([Ttday] + ' ' +[Tttime]); Tttimeid.setValue([Ttidday]+[Ttidtime]); for (var i = 8; i <= Ttlast ; i++) { Ttbase1 = Tvalues[i-1][3] //編集コード1 // Ttbased1 = Ttbase1.getValue() Ttbased2 = Tvalues[i-1][10] //編集コード2 Ttid = Tvalues[i-1][11] //編集コード3 if ( Ttbase1 == "時間" ){ Ttbase1.setBackground('#FF0000') }else if ( Ttbase1 == ""){ Ttbase1.setBackground(null) }else{ Ttset1 = Utilities.formatDate(Ttbase1, "JST", "MMddHHmm") Ttbased2.setValue(Ttset1) if (Ttid <= 0) { Ttbase1.setBackground("#FFFFFF") } else if (Ttid <= 15950000) { Ttbase1.setBackground("#FF0000") } else if (Ttid <= 15950070) { Ttbase1.setBackground('#f4a460') } else if (Ttid <= 15950100) { Ttbase1.setBackground('#FFFF00') } else if (Ttid <= 15952000) { Ttbase1.setBackground('#98fb98') } else{ Ttbase1.setBackground('#FFFFFF') } } } }
動作はしているのですが、処理時間が掛かり過ぎているので、for文の方でgetValueを多用しているので、まずgetDataRange().getValues()全体の値を取得してその値を利用してその後の処理時間を短縮したいです。
改良その①ではsetBackgroundが動作しないので、原因を調べています。
皆様のお力をお貸し下さい。
後、お勧めの本やサイトがありましたら教えて下さい。
おねがいします!
回答1件
あなたの回答
tips
プレビュー