Python 業務自動化 | Excel業務自動化:Excel基本操作 - セル置換

Python Python
スポンサーリンク

セル置換は「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

深掘りポイント

  • inreplace() を組み合わせて部分一致置換
  • 会社名・住所・コメント欄などの置換に便利
  • 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 が必須

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