【GAS入門】条件付きで行を一括削除する方法
GASでスプレッドシートの行を条件付きで一括削除したいんですが…
猫男
catman
よし、catmanが教えてやろう!GASでの行の削除は簡単だ。一緒にやってみよう。
GASで行を削除する基本的な方法
まずは、GASで行を削除する基本から始めよう。
基本的な行の削除
GASでは、スプレッドシートから特定の行を削除することが可能だ。
例えば、以下のコードを見てほしい。
function deleteActiveSheetRow() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rowIndex = 3;
Logger.log(rowIndex + '行目を削除します');
sheet.deleteRow(rowIndex);
}
このコードを実行すると、現在開いているシートの3行目が削除されるぞ。
deleteRow メソッドを使うことで、特定の行を削除できるんだな。
たとえば、次のようなシートがあったとする。

さっきのスクリプトを実行すると、こうなる。

あ、バナナがない!
猫男
catman
そう、その通りだ。
GASで条件付きで行を削除する方法
条件に基づいて行を削除するには、まず条件に合致する行を見つけ、その行番号を取得する必要がある。
例として、特定の列が空白の場合に行を削除する方法を紹介しよう:
function deleteEmptyRowsInActiveSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
for (let i = data.length - 1; i >= 0; i--) {
// 1列目が空白なら、その行を削除
if (data[i][0] === '') {
sheet.deleteRow(i + 1);
}
}
}
このスクリプトでは、現在表示中のシートの行を逆からチェックして、空白の行を一括削除することができる。
逆からチェックするのはなぜですか?
猫男
catman
それは行を削除するとその後の行のインデックスがずれてしまうからさ。逆から削除すれば問題を避けられる。
たとえば、次のようなシートがあったとする。

さっきのスクリプトを実行すると、こうなる。

スッキリ!!
猫男
catman
そう、その調子だ。