範囲取得は「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 で扱いやすくなる
- データ抽出・集計・加工の自動化に直結する
