スプレッドシートを自動化していると、「末尾にデータを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での日付の作り方・計算・表示形式は次の記事にまとめている。
コメント