初心者必見!GASを使って条件付きで行を一括削除する方法

GASでスプレッドシートの行を条件付きで一括削除したいんですが…
猫男
猫男
catman
catman
よし、catmanが教えてやろう!GASでの行の削除は簡単だ。一緒にやってみよう。

GASで行を削除する基本

まずは、GASで行を削除する基本から始めよう。スプレッドシートのデータを扱う際には、必要に応じて行を削除するスキルが重要だ。

基本的な行の削除

GASでは、スプレッドシートから特定の行を削除することが可能だ。例えば、以下のコードを見てほしい:

function deleteRow(sheet, rowIndex) {
  sheet.deleteRow(rowIndex);
}

ここの deleteRow メソッドを使うことで、特定の行を削除することができる。

条件付きで行を削除

条件に基づいて行を削除するには、まず条件に合致する行を見つけ、その行番号を取得する必要がある。

例として、特定の列が空白の場合に行を削除する方法を紹介しよう:

function deleteEmptyRows(sheet) {
  const data = sheet.getDataRange().getValues();
  for (let i = data.length - 1; i >= 0; i--) {
    if (data[i][0] === '') { // ここでは1列目の値が空白かチェックしている
      sheet.deleteRow(i + 1);
    }
  }
}

このスクリプトでは、スプレッドシートの行を逆からチェックして、空白の行を一括削除することができる。

逆からチェックするのはなぜですか?
猫男
猫男
catman
catman
それは行を削除するとその後の行のインデックスがずれてしまうからさ。逆から削除すれば問題を避けられる。

二次元配列での行の削除

配列のデータを使ってスプレッドシートの内容を操作する場合も多い。ここでは、二次元配列から行を削除する方法を見ていこう。

二次元配列の行削除のサンプル

ある条件に合う行を削除するには、こうしたスクリプトが有効だ:

function removeRowsWithCondition(data, columnIndex) {
  return data.filter(row => row[columnIndex] !== ''); // 条件に合わない行のみを残す
}

この filter メソッドを使えば、条件でフィルタをかけ、必要な行のみを二次元配列として残せる。

最終行までの削除

特定の条件を元に、スプレッドシートの最終行まで削除する方法を見てみよう。

最終行まで削除するスクリプト例

最終行まで操作を行う場合は、以下の方法が定番だ。

function deleteRowsToEnd(sheet, startRow) {
  const lastRow = sheet.getLastRow();
  for (let i = lastRow; i >= startRow; i--) {
    sheet.deleteRow(i);
  }
}

このスクリプトは、指定した開始行から最終行までの行を削除する。

これで大量のデータを整理するのも楽になりそうです!
猫男
猫男
catman
catman
そうだろう。GASを上手に使えば、作業が効率的になる。まずは練習問題を解いてみるといい。

練習問題

以下の練習問題をやってみよう!

1. 特定の値が “DELETE” である行をスプレッドシートから削除するスクリプトを書いてみてください。
2. 二次元配列から “0” を含む全ての行を削除する関数を作成してください。

 

 

解答・解説

function deleteRowsWithSpecificValue(sheet, columnIndex) {
  const data = sheet.getDataRange().getValues();
  for (let i = data.length - 1; i >= 0; i--) {
    if (data[i][columnIndex] === 'DELETE') {
      sheet.deleteRow(i + 1);
    }
  }
}

このスクリプトは、指定した列に “DELETE” がある行を削除する。ループを逆方向にすることで、行インデックスのずれを防ぐ。

function removeRowsWithZero(data) {
  return data.filter(row => !row.includes(0));
}

この関数は二次元配列から “0” を含む行を全てフィルタし、残された行を返す。「includes」メソッドを使って配列に指定の値が含まれるか確認する方法だ。