質問: ss.getRange(i+1,1).getValue(); if(cellA=="東京都"){ ss.deleteRow(i); } else{ } } } ```
回答: * TL;DR ``` function q172408() { const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow(); for(var i=lastRow ;i > 0 ; i--){ var cellA = sheet.getRange(i,1).getValue(); if(cellA!="東京都"){ continue; } sheet.deleteRow(i); } } ``` * 解説 1. エラーについて対処するなら最短の手は`var ss = SpreadsheetApp.getActiveSheet();` lastRowを取得していることからしても、最初からActiveなSheetを取れば終わり(ActiveなSpreadShetのさらにSheetを取るという2段階は不要) 2. iのあつかい なぜ0からはじめたのか。そしてそのせいでgetRangeで+1しているがdeleteRowでは+1してないから意図した行が消せない `for (var i = 1;`でよいはず 3. deleteRowはその行を消した結果行がつまる。従って↓のように東京都が連続していた場合、「東京都,2」を消すことができない。行削除は後ろからやる、が鉄則 | A | B | | --- | --- | | 東京都 | 1 | | 東京都 | 2 | | 東京都 | 3 | いろいろ直したものが冒頭のものになります。