セル置換は「Excel内の特定の値を一括で書き換え、データを整形・修正する」ための超重要スキル
Excel業務自動化では、セルの値を検索して置換する処理が非常に多く登場します。
なぜなら、次のような業務が頻繁に発生するからです。
- 「未入力」を空欄に置き換えたい
- 「NG」を「要確認」に変更したい
- 古い日付やコードを新しいものに更新したい
- テンプレートのプレースホルダー(例:
{{DATE}})を実際の値に置換したい
Pythonでは openpyxl を使うことで、Excelのセルを柔軟に置換できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
openpyxlでセルを置換する基本(最も実務向け)
全セルを走査して置換する
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
before = "未入力"
after = ""
for row in ws.iter_rows():
for cell in row:
if cell.value == before:
cell.value = after
wb.save("sample.xlsx")
Python深掘りポイント
iter_rows()でシート全体を効率よく走査できるcell.value == beforeで完全一致を判定- Excelの「置換」機能をPythonで再現できる
- 最も汎用的で確実な置換方法
特定の列だけ置換する(高速で実務向け)
B列だけ置換したい場合
for cell in ws["B"]:
if cell.value == "NG":
cell.value = "要確認"
Python深掘りポイント
- 列が決まっている場合はこの方法が最速
- 明細表の特定項目だけ置換したいときに便利
部分一致で置換する(キーワード置換)
「株式会社」を「(株)」に置換する
keyword = "株式会社"
for row in ws.iter_rows():
for cell in row:
if cell.value and keyword in str(cell.value):
cell.value = str(cell.value).replace(keyword, "(株)")
Python深掘りポイント
inとreplace()を組み合わせて部分一致置換- 会社名・住所・コメント欄などの置換に便利
- Excelの「検索して置換」をPythonで完全再現できる
数値条件で置換する(データ修正に最適)
金額が 0 のセルを「未設定」に置換
for cell in ws["C"]:
if isinstance(cell.value, (int, float)) and cell.value == 0:
cell.value = "未設定"
Python深掘りポイント
- 数値判定には
isinstance()を使う - データクレンジングでよく使うパターン
行全体を見て置換する(行単位の処理)
商品名が「テスト品」の行の金額を 0 に置換
for row in ws.iter_rows(min_row=2):
if row[0].value == "テスト品": # A列が商品名
row[2].value = 0 # C列の金額
Python深掘りポイント
- 行単位で処理すると「条件に一致した行をまとめて修正」できる
- 明細表の修正に非常に便利
例題①:テンプレートのプレースホルダーを置換する
シナリオ
テンプレートに {{DATE}} があるので今日の日付に置換したい。
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook("template.xlsx")
ws = wb["Summary"]
placeholder = "{{DATE}}"
today = datetime.now().strftime("%Y-%m-%d")
for row in ws.iter_rows():
for cell in row:
if cell.value == placeholder:
cell.value = today
wb.save("report.xlsx")
Python深掘りポイント
- プレースホルダー置換はレポート自動生成の基本
- テンプレートを使う業務で最もよく使う
例題②:ログシートの「エラー」を「ERROR」に置換する
シナリオ
ログの表記ゆれを統一したい。
wb = load_workbook("log.xlsx")
ws = wb.active
for row in ws.iter_rows():
for cell in row:
if cell.value == "エラー":
cell.value = "ERROR"
wb.save("log.xlsx")
Python深掘りポイント
- 表記ゆれの統一はデータ分析前の必須作業
- 全セル検索 → 置換の典型パターン
例題③:住所データの「東京都」を「東京」に置換する(部分一致)
シナリオ
住所表記を短縮したい。
wb = load_workbook("address.xlsx")
ws = wb["住所"]
for row in ws.iter_rows():
for cell in row:
if cell.value and "東京都" in str(cell.value):
cell.value = str(cell.value).replace("東京都", "東京")
wb.save("address.xlsx")
Python深掘りポイント
- 部分一致置換は住所・会社名などで大活躍
- データ整形の自動化に最適
pathlib を使った読みやすいセル置換コード
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("sample.xlsx")
wb = load_workbook(path)
ws = wb.active
for row in ws.iter_rows():
for cell in row:
if cell.value == "OLD":
cell.value = "NEW"
wb.save(path)
Pythonメリット
- パス結合が
/で直感的 - 大規模プロジェクトでも保守性が高い
セル置換を業務で設計するときの視点
- 完全一致置換は最も安全で確実
- 部分一致置換で曖昧なデータにも対応できる
- 数値条件置換でデータクレンジングが可能
- プレースホルダー置換はテンプレート自動化の中心
- pandas では置換が簡単だが、Excelの書式を保つなら openpyxl が必須
