Python 業務自動化 | Excel業務自動化:Excel基本操作 - 範囲取得

Python Python
スポンサーリンク

範囲取得は「Excelの表から必要な部分だけを抜き出し、Pythonで自由に加工する」ための超重要スキル

Excel業務自動化では、セルの範囲を取得することが非常に多く登場します。
なぜなら、業務で扱うデータはほとんどが「表形式」であり、その一部だけを抽出して処理することが多いからです。

例えば次のような場面があります。

  • A1〜C10 の範囲を読み取りたい
  • 明細表の全行を取得したい
  • 特定列だけをまとめて取得したい
  • 範囲をループして集計したい

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


openpyxlで範囲を取得する基本(最も実務向け)

A1〜C5 の範囲を取得する

from openpyxl import load_workbook

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

for row in ws["A1":"C5"]:
    for cell in row:
        print(cell.value)
Python

深掘りポイント

  • ws["A1":"C5"] で範囲を指定
  • 返ってくるのは「行ごとのタプル」
  • 2重ループでセルにアクセスできる
  • 表形式のデータを扱うときの基本テクニック

行全体・列全体を取得する(表操作の基礎)

行全体を取得する

for cell in ws[3]:  # 3行目
    print(cell.value)
Python

列全体を取得する

for cell in ws["B"]:  # B列
    print(cell.value)
Python

深掘りポイント

  • ws[3] は「3行目」
  • ws["B"] は「B列」
  • 行・列単位で処理したいときに非常に便利
  • Excelの表をPythonで扱うときの基礎

cell(row, column) を使って動的に範囲取得する

行番号・列番号で範囲を指定

start_row = 2
end_row = 10
start_col = 1
end_col = 3

for r in range(start_row, end_row + 1):
    for c in range(start_col, end_col + 1):
        print(ws.cell(row=r, column=c).value)
Python

深掘りポイント

  • 行番号・列番号で指定できるため動的な範囲取得が可能
  • 「範囲が毎回変わるExcel」を扱うときに必須
  • ループ処理と相性が良い

ヘッダー行を取得する(表の構造を理解する)

1行目のヘッダーを取得

headers = [cell.value for cell in ws[1]]
print(headers)
Python

深掘りポイント

  • ヘッダーを取得して列名を把握できる
  • データ加工の前処理として非常に重要
  • 列名で処理を分岐する業務でよく使う

範囲をリスト化する(Pythonで扱いやすくする)

A列の値をリストにする

values = [cell.value for cell in ws["A"] if cell.value is not None]
print(values)
Python

深掘りポイント

  • Excelの表をPythonのリストに変換できる
  • そのまま検索・集計・加工に使える
  • データ抽出の自動化に最適

例題①:売上データの「金額」列だけを取得して合計する

シナリオ

金額が C列に入っているとする。

from openpyxl import load_workbook

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

total = 0
for cell in ws["C"][1:]:  # 1行目はヘッダーなので除外
    total += cell.value

print("合計:", total)
Python

深掘りポイント

  • 列全体を取得して集計する典型的なパターン
  • pandas を使わずに Excel だけで完結したい場合に便利

例題②:明細表の範囲を取得して2次元リストに変換する

シナリオ

A2〜D10 の明細を Python のリストにしたい。

data = []

for row in ws["A2":"D10"]:
    data.append([cell.value for cell in row])

print(data)
Python

深掘りポイント

  • Excelの表をそのまま Python の2次元リストに変換できる
  • CSV出力・API送信・DB登録などに応用できる

例題③:空白行を除外して範囲を取得する

シナリオ

A列に値がある行だけを抽出したい。

rows = []

for row in ws["A2":"C100"]:
    if row[0].value is not None:  # A列が空でない
        rows.append([cell.value for cell in row])

print(rows)
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["A1":"B3"]:
    print([cell.value for cell in row])
Python

メリット

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

範囲取得を業務で設計するときの視点

  • ws["A1":"C5"] は最も簡単な範囲取得方法
  • 行・列単位の取得は表操作の基本
  • cell(row, column) を使うと動的な範囲取得が可能
  • 範囲をリスト化すると Python で扱いやすくなる
  • データ抽出・集計・加工の自動化に直結する

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