MENU

【GAS】行を追加・削除する方法|appendRow/insertRows/deleteRowの使い方(コピペOK)

スプレッドシートを自動化していると、「末尾にデータを1行足す」「いらない行を消す」「途中に行を挿入する」操作が頻繁に出てきます。GASでは appendRow / insertRows / deleteRow で行を、insertColumns / deleteColumn で列を操作します。この記事ではコピペで動くコード例と、よくある「行がズレる」つまずきの直し方を解説します。

この記事のポイント

  • 末尾に追加は appendRow([値の配列])、途中に挿入は insertRowsAfter/Before
  • 削除は deleteRow(行番号) / 複数は deleteRows(開始, 行数)
  • 行・列の番号は 1始まり
  • 条件で複数行を削除するときは 下から上へループする(上から消すと行番号がズレる)
目次

行を末尾に追加する:appendRow

一番よく使うのが appendRow です。1行ぶんの値を配列で渡すと、データの末尾に追加されます。

function addRow() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.appendRow(["田中", 28, "営業部"]); // 末尾に1行追加
}

注意:appendRow は1行だけです。複数行を一気に追加したいときは、後述の setValues でまとめて書く方が速くなります。

途中に行を挿入する:insertRowsAfter / insertRowsBefore

指定した位置に空行を挿入します。挿入後に値を入れたい場合は setValues で書き込みます。

function insertRows() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  sheet.insertRowsAfter(1, 2);  // 1行目の「後」に空行を2行
  // sheet.insertRowsBefore(3, 1); // 3行目の「前」に空行を1行

  // 挿入した2〜3行目に値を入れる
  sheet.getRange(2, 1, 2, 2).setValues([
    ["新規A", 10],
    ["新規B", 20]
  ]);
}

行を削除する:deleteRow / deleteRows

1行なら deleteRow(行番号)、連続した複数行なら deleteRows(開始行, 行数) です。

function deleteRows() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.deleteRow(3);        // 3行目を削除
  sheet.deleteRows(5, 2);    // 5行目から2行を削除
}

列の追加・削除も同じ要領

列は insertColumnsAfter/Before と deleteColumn/deleteColumns を使います。

function columns() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.insertColumnsAfter(1, 1); // A列の後に1列挿入
  sheet.deleteColumn(2);          // B列を削除
  // sheet.deleteColumns(3, 2);   // C列から2列を削除
}

実践:条件に合う行だけ削除する(つまずき注意)

「ステータスが完了の行を消す」のような処理は実務で頻出ですが、ここに大きな落とし穴があります。上から順に削除すると、削除のたびに下の行が繰り上がって行番号がズレ、消し漏れが起きます。

正解は下から上へループすることです。

function deleteByCondition() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const last = sheet.getLastRow();

  // 下から上へ回す(上から消すと行番号がズレる)
  for (let row = last; row >= 2; row--) {
    const status = sheet.getRange(row, 3).getValue(); // C列のステータス
    if (status === "完了") {
      sheet.deleteRow(row);
    }
  }
}

ヒント:削除が大量になるときは、1行ずつ deleteRow するより「残す行だけを別途 setValues で書き直す」方が速いことがあります。

よくあるつまずきと直し方

消し漏れ・1行飛ばしで消える → 上から削除して行番号がズレています。下から上へループしてください。

appendRowで複数行入らない → appendRow は1行専用。複数行は getRange(...).setValues([[...],[...]]) でまとめて。

insertRowsしたのに値が無い → 挿入されるのは空行だけです。値は setValues で別途書き込みます。

位置がズレる → 行・列番号は1始まり、Afterは「その後ろ」、Beforeは「その前」に入る点に注意。

この記事のポイント(まとめ)

やりたいこと 使うもの
末尾に1行追加 appendRow([値, 値, ...])
途中に挿入 insertRowsAfter(位置, 行数) / insertRowsBefore
1行削除 / 複数行削除 deleteRow(行) / deleteRows(開始, 行数)
列の挿入・削除 insertColumnsAfter/Before / deleteColumn(s)
条件で複数行削除 下から上へループ(行ズレ防止)

次のステップ

あわせて読みたい

追加した行に日付を入れる、あるいは日付を条件にして対象行を絞り込んで削除する、といった場面は多い。GASでの日付の作り方・計算・表示形式は次の記事にまとめている。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次