行削除は「不要なデータ行を自動で取り除き、Excelをクリーンで扱いやすい状態に保つ」ための基本操作
Excel業務自動化では、行を削除する処理が非常に多く登場します。
例えば次のような場面です。
- 空行を削除して表を整えたい
- 条件に合わないデータ行を削除したい
- テンプレートの不要行を消したい
- ログや明細の古い行を削除したい
Pythonでは openpyxl を使うことで、Excelの行を簡単に削除できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
openpyxlで行を削除する基本(最も実務向け)
delete_rows() を使って行を削除する
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
ws.delete_rows(3) # 3行目を削除
wb.save("sample.xlsx")
Python深掘りポイント
delete_rows(3)は「3行目を削除」- 削除した行より下の行はすべて1つ上に詰まる
- 行番号は Excel と同じく 1 始まり
- テンプレートの不要行を消すときに最も使われる
複数行をまとめて削除する(範囲削除)
3行目から5行分削除する
ws.delete_rows(3, 5)
Python深掘りポイント
- 第2引数は「削除する行数」
delete_rows(3, 5)は「3〜7行目を削除」- 大量の不要行を一気に削除したいときに便利
条件に合う行だけ削除する(データクリーニングに最適)
金額が 0 の行を削除する例
from openpyxl import load_workbook
wb = load_workbook("sales.xlsx")
ws = wb["売上"]
for row in range(ws.max_row, 1, -1): # 下からループするのが重要
value = ws[f"C{row}"].value
if value == 0:
ws.delete_rows(row)
wb.save("sales.xlsx")
Python深掘りポイント
- 行削除は必ず下からループする
上から削除すると行番号がずれて誤削除が起きる - データクリーニングで最もよく使うパターン
- 条件判定は Python 側で自由に書ける
空行を自動削除する(表を整える)
A列が空の行を削除する例
for row in range(ws.max_row, 1, -1):
if ws[f"A{row}"].value is None:
ws.delete_rows(row)
Python深掘りポイント
- 空行が混ざった Excel は処理が不安定になる
- 自動削除しておくと後続処理が安定する
- 「空行削除」は業務自動化の鉄板処理
特定の文字を含む行を削除する(フィルタの自動化)
「テスト」という文字が含まれる行を削除
for row in range(ws.max_row, 1, -1):
if "テスト" in str(ws[f"B{row}"].value):
ws.delete_rows(row)
Python深掘りポイント
- Excel のフィルタ機能を Python で再現できる
- 不要データの自動除去に最適
例題①:売上データから「金額が0」の行を削除する
シナリオ
売上データに不要行が混ざっているため削除したい。
from openpyxl import load_workbook
wb = load_workbook("sales.xlsx")
ws = wb["売上"]
for row in range(ws.max_row, 1, -1):
if ws[f"C{row}"].value == 0:
ws.delete_rows(row)
wb.save("sales.xlsx")
Python深掘りポイント
- 下から削除することで行番号のズレを防ぐ
- データクリーニングの基本パターン
例題②:テンプレートの不要行(説明文など)を削除する
シナリオ
テンプレートの上部に説明文があるため削除したい。
from openpyxl import load_workbook
wb = load_workbook("template.xlsx")
ws = wb["Sheet1"]
ws.delete_rows(1, 3) # 上から3行削除
wb.save("template_clean.xlsx")
Python深掘りポイント
- テンプレート整理は業務自動化の第一歩
- 不要行を削除することで後続処理が安定する
例題③:ログシートから古いデータを削除する
シナリオ
100行より前の古いログを削除したい。
from openpyxl import load_workbook
wb = load_workbook("log.xlsx")
ws = wb.active
ws.delete_rows(2, ws.max_row - 100)
wb.save("log.xlsx")
Python深掘りポイント
- ログが増えすぎると Excel が重くなる
- 古い行を削除して軽量化できる
- 定期的なメンテナンス処理として有効
pathlib を使った読みやすい行削除コード
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("sample.xlsx")
wb = load_workbook(path)
ws = wb.active
ws.delete_rows(5)
wb.save(path)
Pythonメリット
- パス結合が
/で直感的 - 大規模プロジェクトでも保守性が高い
行削除を業務で設計するときの視点
- delete_rows() は「行削除」の中心となるメソッド
- 条件削除は必ず下からループする
- 空行削除は表を整えるための基本処理
- テンプレート整理やログ管理で非常に役立つ
- pandas では行削除は簡単だが、Excelの書式を保つなら openpyxl が必須
