セル検索は「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 が必須
