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

Python Python
スポンサーリンク

列削除は「不要な列を取り除き、Excelデータをスリムで扱いやすくする」ための基本操作

Excel業務自動化では、列を削除する処理が非常に多く登場します。
例えば次のような場面です。

  • 不要な項目(メモ欄・備考欄)を削除したい
  • テンプレートの余計な列を消して整えたい
  • データ加工の前処理として列を整理したい
  • CSV → Excel 変換後に不要列を削除したい

Pythonでは openpyxl を使うことで、Excelの列を簡単に削除できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。


openpyxlで列を削除する基本(最も実務向け)

delete_cols() を使って列を削除する

from openpyxl import load_workbook

wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]

ws.delete_cols(2)  # B列を削除

wb.save("sample.xlsx")
Python

深掘りポイント

  • delete_cols(2) は「2列目(B列)を削除」
  • 削除した列より右側の列がすべて左に詰まる
  • 列番号は Excel と同じく 1 始まり
  • テンプレート整理やデータ前処理で最も使われる

複数列をまとめて削除する(範囲削除)

2列目から3列分削除する

ws.delete_cols(2, 3)
Python

深掘りポイント

  • 第2引数は「削除する列数」
  • delete_cols(2, 3) は「B〜D列を削除」
  • 大量の不要列を一気に削除したいときに便利

列名(ヘッダー)を見て削除する(実務で最も使う)

列名が「備考」の列を削除する

from openpyxl import load_workbook

wb = load_workbook("data.xlsx")
ws = wb["Sheet1"]

for col in range(ws.max_column, 0, -1):  # 右からループするのが重要
    if ws.cell(row=1, column=col).value == "備考":
        ws.delete_cols(col)

wb.save("data.xlsx")
Python

深掘りポイント

  • 列削除は必ず右からループする
    左から削除すると列番号がずれて誤削除が起きる
  • ヘッダー名で削除するのは実務で最も安全で確実

空列を自動削除する(表を整える)

全セルが空の列を削除する

for col in range(ws.max_column, 0, -1):
    values = [ws.cell(row=r, column=col).value for r in range(1, ws.max_row + 1)]
    if all(v is None for v in values):
        ws.delete_cols(col)
Python

深掘りポイント

  • 空列が混ざった Excel は処理が不安定になる
  • 自動削除しておくと後続処理が安定する
  • データクレンジングの基本処理

特定の文字を含む列を削除する(フィルタの自動化)

列名に「テスト」が含まれる列を削除

for col in range(ws.max_column, 0, -1):
    header = str(ws.cell(row=1, column=col).value)
    if "テスト" in header:
        ws.delete_cols(col)
Python

深掘りポイント

  • Excel のフィルタ機能を Python で再現できる
  • 不要項目の自動除去に最適

例題①:売上データから「備考」列を削除する

シナリオ

売上データに不要な「備考」列があるため削除したい。

from openpyxl import load_workbook

wb = load_workbook("sales.xlsx")
ws = wb["売上"]

for col in range(ws.max_column, 0, -1):
    if ws.cell(row=1, column=col).value == "備考":
        ws.delete_cols(col)

wb.save("sales.xlsx")
Python

深掘りポイント

  • ヘッダー名で削除するのが最も安全
  • 列番号が変わっても対応できる

例題②:テンプレートの不要列(説明列など)を削除する

シナリオ

テンプレートの右側にある説明列を削除したい。

from openpyxl import load_workbook

wb = load_workbook("template.xlsx")
ws = wb["Sheet1"]

ws.delete_cols(5, 2)  # E列から2列削除

wb.save("template_clean.xlsx")
Python

深掘りポイント

  • テンプレート整理は業務自動化の第一歩
  • 不要列を削除することで後続処理が安定する

例題③:データ加工の前処理として空列を削除する

シナリオ

CSV → Excel 変換後に空列が混ざっているため削除したい。

from openpyxl import load_workbook

wb = load_workbook("data.xlsx")
ws = wb.active

for col in range(ws.max_column, 0, -1):
    values = [ws.cell(row=r, column=col).value for r in range(1, ws.max_row + 1)]
    if all(v is None for v in values):
        ws.delete_cols(col)

wb.save("data.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_cols(3)

wb.save(path)
Python

メリット

  • パス結合が / で直感的
  • 大規模プロジェクトでも保守性が高い

列削除を業務で設計するときの視点

  • delete_cols() は「列削除」の中心となるメソッド
  • 条件削除は必ず右からループする
  • 空列削除は表を整えるための基本処理
  • ヘッダー名で削除すると安全で確実
  • pandas では列削除は簡単だが、Excelの書式を保つなら openpyxl が必須

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