GASでスプレッドシートの
行・列を挿入・削除・非表示にする方法

「表の途中に行を差し込みたい」「不要な行だけまとめて消したい」「作業用の列を普段は隠しておきたい」。こうした行・列の操作は、insertRowsBeforedeleteRowなどのメソッドでコードから自動化できます。とくに削除で行番号がずれる落とし穴と、その安全な回し方を、動くコードで解説します。

|対象: GAS / スプレッドシート / データ整形

Table of Contents

行・列操作でできること

GASでは、スプレッドシートの行や列そのものをコードで足したり消したり隠したりできます。値の読み書き(getValues/setValues)とは別に、表の「構造」を変える操作だと考えると整理しやすいです。すべてSheet(シート)オブジェクトのメソッドで実行します。

挿入

insertRowsBefore / insertColumnsAfter などで空の行・列を差し込む

追加

appendRowで最終行の次に1行足して値まで書き込む

削除

deleteRow / deleteColumns で不要な行・列を消す

非表示

hideRows / hideColumns で見た目だけ隠す(データは残る)

行番号・列番号はどちらも1始まりです(1行目・A列が1)。値の範囲を扱うgetRangeと同じ数え方なので、迷ったら「画面の行番号・列のアルファベット順」で数えれば合います。

行を挿入・追加する

行の挿入はinsertRowsBefore(行番号, 行数)insertRowsAfter(行番号, 行数)の2つが基本です。指定した行の「手前」か「後ろ」に、指定した数だけ空行を差し込みます。ただ末尾に足すだけなら、appendRowが手軽です。

// 行を挿入・追加する3つの基本形。
function insertRows() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // 3行目の「手前」に2行挿入する。
  // 元の3行目以降は下にずれる(3・4行目が空行になる)。
  sheet.insertRowsBefore(3, 2);

  // ヘッダー(1行目)の「後ろ」に1行挿入する。
  // 表の先頭に新しいデータ行を差し込みたいときに便利。
  sheet.insertRowsAfter(1, 1);

  // データの最終行の次に1行追加して、そのまま値を書き込む。
  // 挿入位置を考えなくてよいので、ログの追記に向く。
  sheet.appendRow(["2026-07-20", "山田太郎", 1200]);
}

appendRowは「最終行の次」に自動で書き込むため、挿入位置を計算する必要がありません。日々のログ追記やフォーム回答の転記など、末尾に足していくだけの処理に向いています。表の途中に差し込みたいときだけ、insertRows系を使い分けてください。

列を挿入・削除する

列の操作は行とほぼ同じで、insertColumnsBefore/insertColumnsAfterで挿入、deleteColumnsで削除します。違いは、指定するのが行番号ではなく列番号(A列=1, B列=2, …)である点だけです。

// 列を挿入・削除する。行番号ではなく「列番号」で指定する(A=1, B=2, ...)。
function insertAndDeleteColumns() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // B列(2列目)の手前に1列挿入する。元のB列以降は右にずれる。
  sheet.insertColumnsBefore(2, 1);

  // D列(4列目)の後ろに2列挿入する。
  sheet.insertColumnsAfter(4, 2);

  // C列(3列目)から2列分(C・D列)を削除する。
  sheet.deleteColumns(3, 2);

  // 1列だけ消すなら deleteColumn(単数形)でもよい。
  // sheet.deleteColumn(3);
}

1行・1列だけを扱うなら単数形のdeleteColumndeleteRowも使えます。複数まとめて消すときは、これから説明する削除の順番に注意が必要です。

行を削除する|上から消すとずれる問題

連続した行なら、deleteRows(開始行, 行数)でまとめて削除できます。問題になるのは飛び飛びの行を消すときです。1行削除すると下の行がすべて繰り上がり、行番号がずれます。

// 行を削除する。連続した範囲は deleteRows(開始行, 行数) でまとめて消せる。
function deleteRows() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // 5行目から3行分(5・6・7行目)を一括で削除する。
  sheet.deleteRows(5, 3);

  // 1行だけ消すなら deleteRow(単数形)。
  // sheet.deleteRow(5);
}

たとえば3行目と5行目を消したいとき、先に3行目を消すと、元の5行目は4行目に繰り上がってしまいます。そのまま5行目を消すと、まったく別の行を削除してしまう——これが「上から消すとずれる」問題です。

解決策はシンプルで、下の行(大きい行番号)から削除することです。すでに消した行より上の行番号は変わらないため、ずれが起きません。次のセクションで実務的な例を見てみましょう。

条件に一致する行だけ一括削除する

「ステータスがキャンセルの行だけ消す」のような処理は実務で頻出です。ポイントは、まずgetValuesで対象列を一括で読み、削除する行番号を集めてから、降順(下から)に削除することです。

// 条件に一致する行だけを一括削除する実務例。
// 【重要】上から消すと行番号がずれる。必ず「下の行から」削除する。
function deleteCanceledRows() {
  const sheet = SpreadsheetApp.getActive().getSheetByName("注文一覧");
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return; // ヘッダーのみ or 空

  // 2行目以降のC列(ステータス)を一括で読む(アクセス1回)。
  const statuses = sheet.getRange(2, 3, lastRow - 1, 1).getValues();

  // 「キャンセル」の行番号を集める。
  // 配列の0番目が実シートの2行目なので、行番号は i + 2。
  const targetRows = [];
  statuses.forEach(function (row, i) {
    if (row[0] === "キャンセル") targetRows.push(i + 2);
  });

  // 下(大きい行番号)から削除すると、まだ消していない上の行番号がずれない。
  targetRows.reverse().forEach(function (rowNumber) {
    sheet.deleteRow(rowNumber);
  });

  Logger.log(targetRows.length + "行を削除しました");
}

reverse()で行番号を大きい順に並べてから削除しているのがミソです。なお、削除する行が非常に多い場合は、消すのではなく「残す行だけを集めて書き戻す」ほうが速くなります。一括読み書きの考え方はスプレッドシート処理の高速化で解説しています。

行・列を非表示にする・戻す

削除せずに「見た目だけ隠したい」ときはhideRows(開始行, 行数)hideColumns(開始列, 列数)を使います。非表示はデータを消すわけではないので、隠した行の値もgetValuesで通常どおり読めます。

// 行・列を非表示にする/再表示する。データは消えず見た目だけ隠れる。
function hideAndShow() {
  const sheet = SpreadsheetApp.getActiveSheet();

  // 2行目から3行分(2〜4行目)を非表示にする。
  sheet.hideRows(2, 3);

  // 同じ範囲を指定して再表示する。
  // sheet.showRows(2, 3);

  // C列(3列目)から2列分(C・D列)を非表示にする。
  sheet.hideColumns(3, 2);

  // 再表示は showColumns。
  // sheet.showColumns(3, 2);

  // 範囲オブジェクトからまとめて隠すこともできる。
  // sheet.getRange("F:H").getSheet().hideColumns(6, 3);
}

再表示はshowRows/showColumnsに同じ範囲を渡すだけです。計算用の中間列や、閲覧者に見せたくない管理列を普段は隠しておき、処理のときだけ表示する、といった運用に役立ちます。誤って消してしまうリスクがある列は、削除より非表示のほうが安全です。

まとめ

行・列の操作は、挿入(insertRows/Columns)・追加(appendRow)・削除(deleteRow/Columns)・非表示(hideRows/Columns)の4種類を押さえれば十分です。とくに大事なのは、飛び飛びの行を消すときに「下の行から削除する」こと。上から消すと行番号がずれて、別の行を巻き込む事故につながります。条件に一致する行を消すときは、対象の行番号を集めて降順に削除するか、残す行だけを書き戻す方式を選びましょう。表の整形を自動化して、手作業の行削除から解放されてください。

よくある質問

1行削除すると、その下の行がすべて1つ上に繰り上がり、行番号がずれるためです。たとえば3行目と5行目を消したいとき、先に3行目を消すと、元の5行目は4行目に変わってしまい、そのまま5行目を消すと別の行を消してしまいます。対策は「下の行(大きい行番号)から削除する」ことです。こうすれば、まだ消していない上側の行番号はずれません。削除対象の行番号を配列に集め、降順に並べてから削除するのが定石です。

insertRowsBefore(行番号, 行数)は指定した行の「手前」に、insertRowsAfter(行番号, 行数)は「後ろ」に空行を挿入します。たとえばinsertRowsBefore(3, 2)なら3行目の上に2行入り、元の3行目以降は下にずれます。ヘッダーの直下に新しい行を差し込みたいならinsertRowsAfter(1, 1)、末尾にただ追加したいだけならappendRowが簡単です。

appendRow(配列)は、データがある最終行の次の行に1行追加し、そのまま値を書き込みます。挿入位置を考えなくてよいので、ログの追記など末尾に足すだけの用途に向いています。一方insertRowsで空行を作る方法は、表の途中に行を差し込みたいときに使います。appendRowは行の挿入と値の書き込みを1回でやってくれる手軽な近道です。

戻せます。hideRows(開始行, 行数)で隠した行はshowRows(開始行, 行数)で、hideColumns(開始列, 列数)で隠した列はshowColumns(開始列, 列数)で再表示できます。非表示はデータを消すわけではなく見た目を隠すだけなので、隠した行の値はgetValuesで通常どおり読めます。作業用の列を普段は隠しておき、処理のときだけ表示する、といった使い方ができます。

連続した範囲ならdeleteRows(開始行, 行数)でまとめて削除するのが速いです。飛び飛びの行を消す場合は、削除するより「残す行だけを新しい配列に集め、シートを一度クリアしてsetValuesで書き戻す」ほうが、行数が多いと圧倒的に高速です。1回の書き込みで済むためです。数千行を扱うときはこの書き戻し方式を検討してください。

スプレッドシートの
自動化を相談する。

行・列の整形から、集計・帳票・通知までの業務自動化まで、GAS開発をまとめてご相談いただけます。要件整理から運用設計までお手伝いします。

GAS開発を見る