Python 業務自動化 | Excel業務自動化:Excel基本操作 - 行削除

Python Python
スポンサーリンク

行削除は「不要なデータ行を自動で取り除き、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 が必須

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