【Python】Excelファイルの表の値を取得する方法📊🐍(openpyxl / pandas対応)

Excelの表データをPythonで読み取れるようになると、作業効率が一気に上がります🚀✨
たとえば「毎月の集計」「定型レポート作成」「CSV化」「データ整形」「チェック自動化」などが、クリック作業ゼロで回せるようになります🧠✅


目次
  1. PythonでExcelを読む代表的な方法は2つ🧩✨
  2. まずは準備:ライブラリをインストール📦✨
  3. 【基本】openpyxlでExcelの表データを取得する📘✨
  4. 【実務で強い】pandasでExcel表を一括取得する📈✨
  5. よくあるハマりどころと対策⚠️✨
  6. すぐ使える!「Excel→CSV」変換テンプレ📤✨
  7. 活用アイデア(あなたの作業がこう変わる)🌈✨
  8. よくある質問(FAQ)🙋‍♂️🙋‍♀️✨
  9. まとめ✅✨

PythonでExcelを読む代表的な方法は2つ🧩✨

方法①:openpyxl(セル単位で細かく取れる)🧷

  • セルA1の値、行ごとの値、範囲指定などが得意📌
  • 書式は基本無視で「値だけ」取りたいケースに強い💪

方法②:pandas(表を一気にDataFrame化できる)📈

  • 表形式(行列)を丸ごと読み込み→集計・加工が超ラク✨
  • “データ分析”や“前処理”まで一気にやりたい人向け🎯

まずは準備:ライブラリをインストール📦✨

openpyxlを使う場合🧷

pip install openpyxl

pandasでExcelを読む場合📈

pip install pandas openpyxl

【基本】openpyxlでExcelの表データを取得する📘✨

1) Excelを開いてシートを選ぶ📂

from openpyxl import load_workbook

path = r"C:\work\data.xlsx"  # 🔁 自分のExcelパスに変更
wb = load_workbook(path, data_only=True)  # ✅ 数式セルは計算結果の値を取得
ws = wb["Sheet1"]  # または wb.active

💡ポイント

  • data_only=True を付けると、数式の「式」ではなく「表示値(計算結果)」を取りやすいです🧠✅
  • ただし、Excel側で未計算だと古い値になることがあります(後半で対策あり)⚠️

2) セル1つの値を取る(最小構成)🔎

value = ws["B2"].value
print(value)

3) 行をまとめて取得する(ヘッダー込み)🧾✨

A1〜D10みたいに範囲で取る📌

rows = ws["A1":"D10"]

for row in rows:
    values = [cell.value for cell in row]
    print(values)

行番号・列番号で取る(より柔軟)🧱

for r in range(1, 11):        # 1〜10行
    for c in range(1, 5):     # 1〜4列(A〜D)
        print(ws.cell(r, c).value)

4) 「表の終端まで」自動で読む(空行まで)🧠✅

よくある形:A列が空になるまで読む📌

r = 1
while ws.cell(r, 1).value is not None:  # A列が空になるまで
    row_values = [ws.cell(r, c).value for c in range(1, ws.max_column + 1)]
    print(row_values)
    r += 1

5) 最速で「表」っぽく取る:iter_rowsを使う⚡

for row in ws.iter_rows(min_row=1, max_row=100, min_col=1, max_col=10, values_only=True):
    print(row)

values_only=True のメリット

  • cell.value を毎回書かなくてOK✨
  • そのままタプルで取れて軽いです⚡

【実務で強い】pandasでExcel表を一括取得する📈✨

1) 1枚のシートをDataFrame化📊

import pandas as pd

path = r"C:\work\data.xlsx"
df = pd.read_excel(path, sheet_name="Sheet1")  # 先頭行をヘッダー扱い
print(df.head())

2) ヘッダーが2行目から始まる場合🧾

df = pd.read_excel(path, sheet_name="Sheet1", header=1)

3) 必要な列だけ読む(高速&安全)🎯

df = pd.read_excel(path, sheet_name="Sheet1", usecols="A:D")

4) 行数が多いExcelでも軽く読むコツ⚡

  • usecolsで列を絞る🎯
  • 余計なシートを読まない📄
  • 表の範囲が決まっているなら先に範囲指定する🧠✅

よくあるハマりどころと対策⚠️✨

数式セルが「式」になってしまう📌

  • openpyxlは data_only=True が基本✅
  • ただし Excel側で計算済みの値 が保存されていないと、期待通りにならないことがあります⚠️
    ➡️ 対策:Excelで一度開いて保存(または計算設定を確認)💾✨

xls(古いExcel)が読めない📄

  • openpyxl は基本 xlsx 用です🧷
  • xlsの場合は、いったんxlsxに変換するのが早いです✅

文字化けする?🌀

Excel読み込みで「日本語が文字化け」は少なめですが、
CSV変換後に文字化けするケースが多いです⚠️
➡️ CSV出力は encoding="utf-8-sig" を使うのが鉄板です🧠✅


すぐ使える!「Excel→CSV」変換テンプレ📤✨

pandasで一発変換(最短)🚀

import pandas as pd

path = r"C:\work\data.xlsx"
df = pd.read_excel(path, sheet_name="Sheet1")
df.to_csv(r"C:\work\data.csv", index=False, encoding="utf-8-sig")

活用アイデア(あなたの作業がこう変わる)🌈✨

✅ 毎月のExcel集計を自動化して、作業時間を半分以下に⏱️
✅ チェック表の“漏れ・重複”を自動検知してミス削減🛡️
✅ Excel→CSV→DB登録まで一気通貫で自動化🔁
✅ レポートを自動生成して“考える時間”を増やせる🧠✨


よくある質問(FAQ)🙋‍♂️🙋‍♀️✨

Q1. openpyxlとpandas、どっちを使うべき?🤔

表を丸ごと扱うならpandas📈、セル単位で細かく扱うならopenpyxl🧷 が最短です✅

Q2. 数式の結果が取れません…⚠️

load_workbook(..., data_only=True) を使ってください✅
ただしExcel側で未計算だと古い値になることがあります💡(一度開いて保存が確実です💾)

Q3. シート名が分からないです📄

openpyxlならこれで一覧が取れます✅

print(wb.sheetnames)

Q4. 途中に空白行がある表はどう読む?🌀

「A列が空になったら終了」のような単純ルールだと途切れます⚠️
➡️ 対策は「最大行まで読む」「キー列を複数見る」「表範囲を固定する」が安定です🧠✅

Q5. 取得したデータを加工して集計したい📊

それならpandasが最強です🔥
groupby()pivot_table() でExcelより速く集計できます🚀✨


まとめ✅✨

  • openpyxl:セル単位・範囲指定で取りたい人向け🧷
  • pandas:表を一気に読み込んで加工・集計したい人向け📈
  • Excelデータ取得ができると、単純作業が“自動化の資産”に変わるのが最大のメリットです💎✨
あざらし

はじめまして、あざらしです。 フリーターからエンジニア会社へ就職し、 現在はフリーランスのシステムエンジニアとして働いています。 本業のエンジニア業のかたわら、 ✍️ ブログ運営 と「収入の柱を増やす挑戦」を少しずつ続けています。 フリーター時代から比べると、 段階的に収入が増えていくのを実感できるのが素直にうれしい今日この頃。 このブログでは、日々の気づき・体験談 IT・ガジェット・ゲーム系の話 「調べて分かったこと」を噛み砕いた解説 などを中心に、ジャンルに縛られない雑記ブログとして発信しています。 「自分と同じように悩んでいる人のヒントになればいいな」 そんな気持ちで更新中です。 👉 プロフィール詳細は、名前「あざらし」をクリックしてください