列削除は「不要な列を取り除き、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 が必須
