GASでスプレッドシートの行を削除する方法

GAS

※本記事はプロモーションを含みます

目次

スプレッドシートを日々の業務で運用していると、処理済みのステータスになったレコードや、蓄積されすぎて不要になった過去のログデータなど、特定の条件を満たした行を取り除きたい場面が頻繁に出てきます。手動でフィルターをかけて該当する行を1行ずつ右クリックから削除していく作業は、件数が少ないうちは問題ありません。ただし、定期的な運用業務になると工数の浪費につながるので、削除対象を誤って必要な行まで消してしまうリスクも抱えます。こうした反復業務を自動化する手段としてGoogle Apps Script(GAS)を用いたシートのメンテナンスは定番です。なので、行を削るという操作にはスプレッドシート特有の癖が存在します。正しく挙動を把握しないままスクリプトを実行すると、削除した瞬間に下のデータがせり上がってくる仕様に足をすくわれます。というのも、消すべき行がすり抜けたり、残すべきデータが吹き飛んだりするトラブルが発生するからです。この記事では、GASを使ってスプレッドシートの行を削除する際の基本的な書き方から、実務で絶対に避けては通れない行番号のズレ対策、連続行の効率的な除去手法までを具体的に整理しましょう。

手動で選んで消す日常とスクリプトに任せた後のデータ状態

スプレッドシートに毎日追記される問い合わせリストや発注履歴を管理している現場では、毎週末や月末に「完了フラグが立った行を消す」「作成日が30日以上前のログ行を掃除する」といった整理作業が発生しがちです。手作業でこの作業を行う場合、まず対象列にフィルターを設定します。なので、「完了」や古い日付で絞り込みを行ってから、表示された行範囲をドラッグして右クリックし、行削除を選択するというステップを踏みましょう。ただし、手作業でのフィルタリングと削除には常に人為的なミスの危険がつきまといます。誤ってフィルター条件の設定を間違えたまま一括削除を実行してしまい、大事な未対応案件を巻き込んで削除してしまう事故が起こります。というのも、削除後にフィルターを解除したら表示が崩れていて元の順番が分からなくなるようなトラブルを経験した方も多いからです。

この作業をGASによる自動実行へ移行すると、データに対するアプローチの確実性が劇的に変わります。トリガーによって深夜に自動でスクリプトが走るので、特定の条件に合致する不要な行だけがピンポイントで除去されます。なので、翌朝シートを開いたときには必要な最新データだけが整然と並んでいる状態を作り出せます。手動作業のように担当者の集中力や作業手順に依存することなく、コードで定義したルール通りの厳密なデータ整理が完了します。ただし、プログラムに作業を委ねるということは、コードが指定した行番号に対して一切の躊躇なく削除が実行されるということです。画面上で目視しながら「あ、ここまでは消していいけれど次の行はダメだ」と微調整することはできません。というのは、プログラムで行を削除する前に、APIがどのようにシート構造を操作し、削除した直後にシート全体のインデックスがどう変化するのかを正確に把握しておく必要があるからです。無料で登録しただけでは、全機能が使えるとは限りません。

単一行を削るdeleteRowの挙動と行番号が繰り上がる影響

GASでスプレッドシートの特定の1行を削除する最小単位の処理には、Sheetクラスに用意されているdeleteRow()(特定の1行を削除する処理)というメソッドを利用しましょう。このメソッドは、引数として渡された行番号(シート上で目に見える1始まりの行インデックス)の行を完全に削除します。なので、シート上から物理的に消し去る命令となります。値だけをクリアして空行を残すclearContent()(値だけを消去する処理)とは異なります。というのも、行そのものが詰められる点に特徴があるからです。

いつこの単一行削除を使うかというと、たとえば特定のキー情報を持った1件のレコードだけを検索してピンポイントで消し去りたい場合です。なので、ヘッダー直下の2行目に挿入されたテスト用ダミーデータをスクリプトの最後に1行だけ除去したいといった場面でも使いましょう。指定した行番号が削除されると、その行にあったデータだけでなく、セルの書式や結合、入力規則なども含めて行全体が消滅します。ただし、最も注意しなければならないのは、削除された行よりも下にあったすべての行が、即座に1行ずつ上に繰り上がってくるという点です。

タイトルとURLをコピーしました