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

Python Python
スポンサーリンク

セル検索は「Excelの中から必要な値を探し出し、Pythonで次の処理につなげる」ための超重要スキル

Excel業務自動化では、セルを検索する処理が非常に多く登場します。
なぜなら、業務で扱うExcelは次のような特徴があるからです。

  • 欲しいデータがどの行・列にあるかわからない
  • シート内のどこかにあるキーワードを探したい
  • 特定の値を見つけて、その行を加工したい
  • 設定値(例:レポート名、日付)がどのセルにあるか毎回違う

Pythonでは openpyxl を使うことで、Excelのセルを柔軟に検索できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。


openpyxlでセルを検索する基本(最も実務向け)

全セルを走査して検索する

from openpyxl import load_workbook

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

target = "商品A"

for row in ws.iter_rows():
    for cell in row:
        if cell.value == target:
            print("見つかりました:", cell.coordinate)
Python

深掘りポイント

  • iter_rows() はシート全体を効率よく走査できる
  • cell.coordinate で「A3」などの位置が取得できる
  • 最も汎用的で確実な検索方法

特定の列だけ検索する(高速で実務向け)

A列だけ検索したい場合

target = "商品A"

for cell in ws["A"]:
    if cell.value == target:
        print("A列で見つかりました:", cell.row)
Python

深掘りポイント

  • 列が決まっている場合はこの方法が最速
  • cell.row で行番号が取得できる
  • 明細表の検索でよく使う

部分一致で検索する(キーワード検索)

「商品」という文字を含むセルを探す

keyword = "商品"

for row in ws.iter_rows():
    for cell in row:
        if cell.value and keyword in str(cell.value):
            print("部分一致:", cell.coordinate)
Python

深掘りポイント

  • keyword in str(cell.value) で部分一致検索
  • Excelのフィルタ機能をPythonで再現できる
  • 曖昧検索が必要な業務で便利

数値条件で検索する(データ抽出に最適)

金額が 1000 以上のセルを探す

for cell in ws["C"]:
    if isinstance(cell.value, (int, float)) and cell.value >= 1000:
        print("1000以上:", cell.coordinate)
Python

深掘りポイント

  • 数値判定には isinstance() を使う
  • 条件抽出の自動化に最適
  • pandas を使わずに Excel だけで完結できる

行全体を検索して一致した行を取得する

商品名が一致する行を取得

target = "商品B"

for row in ws.iter_rows(min_row=2):
    if row[0].value == target:  # A列が商品名
        print("行データ:", [c.value for c in row])
Python

深掘りポイント

  • 行単位で検索すると「一致した行を丸ごと取得」できる
  • 明細表の抽出に非常に便利

例題①:売上データから「商品A」の行を検索する

シナリオ

A列に商品名が入っているとする。

from openpyxl import load_workbook

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

target = "商品A"

for row in ws.iter_rows(min_row=2):
    if row[0].value == target:
        print("商品Aの行:", [c.value for c in row])
Python

深掘りポイント

  • 行全体を取得できるため後続処理がしやすい
  • 商品名・社員名・ID検索でよく使う

例題②:設定シートから「レポート名」のセルを検索する

シナリオ

設定シートのどこかに「レポート名」がある。

wb = load_workbook("config.xlsx")
ws = wb["設定"]

keyword = "レポート名"

for row in ws.iter_rows():
    for cell in row:
        if cell.value == keyword:
            print("レポート名の値:", ws.cell(row=cell.row, column=cell.column+1).value)
Python

深掘りポイント

  • キー(項目名)を見つけて、その右隣の値を取得する
  • Excelを「設定ファイル」として使う実務で非常に多い

例題③:部分一致で「エラー」を含むセルを検索する

シナリオ

ログシートからエラー行を抽出したい。

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

for row in ws.iter_rows():
    for cell in row:
        if cell.value and "エラー" in str(cell.value):
            print("エラー行:", cell.row)
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 == "検索対象":
            print(cell.coordinate)
Python

メリット

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

セル検索を業務で設計するときの視点

  • iter_rows() は最も汎用的で強力な検索方法
  • 列が決まっている場合は列検索が高速
  • 部分一致検索で曖昧なデータにも対応できる
  • 数値条件検索でデータ抽出が可能
  • 設定シートの「キー → 値」取得は実務で非常に多い
  • pandas ではセル検索が難しいため openpyxl が必須

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