毎日繰り返されるExcelのコピペ作業、データの集計、定型レポートの作成。。といった作業が面倒臭いと思ったことはありませんか?
pythonを用いれば、それらの作業をコマンド1つで終わらせることが可能です。
本記事では、PythonでExcelを操るための「代表的なライブラリ」と、明日から使える「基本操作」を解説します!
🎯この記事はこんな人におすすめ
- PythonでExcel操作を自動化してみたい方
- 手作業の単純業務から解放されたい方
- pandas や openpyxl という名前は聞いたことがあるけれど、使い方が分からない方
PythonでExcelを操作する方法の全体像
PythonからExcelを操作する方法はいくつかあり、 用途によって使い分けることが重要です。
| ライブラリ | 主な用途 |
|---|---|
| openpyxl | Excel(.xlsx)の読み書き・書式操作 |
| pandas | データ分析・集計 |
| xlrd / xlwt | 旧形式(.xls)の読み書き |
| xlwings | Excelアプリを直接操作 |
本記事では、openpyxl と pandas を中心に解説します。
事前準備
ライブラリのインストール
まずは必要なライブラリをインストールしましょう。
ターミナル(またはコマンドプロンプト)で以下のコマンドを実行します。
pip install openpyxl pandas
openpyxlでExcelを操作する
openpyxl は、Excelファイルを「セル単位」で細かく操作できるライブラリです。
「A1セルに文字を入れる」「文字を赤くする」といった、人間がExcelで行う操作をそのままプログラムで書くイメージです。
Excelファイルを新規作成する
from openpyxl import Workbook
# 1. ワークブック(Excelファイル本体)を作成
wb = Workbook()
# 2. アクティブなシート(最初に開いているシート)を選択
ws = wb.active
# 3. シートの名前を変更(任意)
ws.title = "名簿リスト"
# 4. セルに値を書き込む
# A1セルに「名前」、B1セルに「年齢」を入力
ws["A1"] = "名前"
ws["B1"] = "年齢"
# 5. ファイル名を指定して保存
wb.save("sample.xlsx")
注意点:
最後にsave()をしないとファイルとして保存されないので注意が必要です。
ポイント:
既にあるファイル名でsave()を行うと上書きされ、存在しないファイル名でsave()を行うと新規作成されます。
既存のExcelファイルを読み込む
from openpyxl import load_workbook
# 1. 既存のファイルを読み込む
wb = load_workbook("sample.xlsx")
# 2. アクティブなシート(最初に開いているシート)を選択
ws = wb.active
# 3. 特定のセルの値を取得して表示
print(f"A1セルの値: {ws['A1'].value}")
# 出力結果: A1セルの値: XX
-
load_workbook()を使用します - セルの値を取り出すときは
.valueを付けます
シートの指定について:
上記のwb.activeは「Excel保存時に開かれていたシート(必ずしも1番目のシートとは限らない)」を取得するため、意図しないシートが選ばれてしまう可能性があります。
確実に特定のシートを操作したい場合は、以下のようにシート名を直接指定してください。
# "Sheet1" という名前のシートを指定して取得する場合
ws = wb["Sheet1"]
セルをループで処理する
# データ範囲をループして読み取る
# min_row=1 : 1行目からスタート
# max_col=3 : 3列目(C列)まで
for row in ws.iter_rows(min_row=1, max_col=3):
for cell in row:
print(cell.value)
-
iter_rows()は、指定した範囲のセルを 「1行ずつ」 取ってくる便利な機能です - 行のリストが
rowに入り、その中のセルをcellとして取り出しています
イメージ:
- 外側のループが「1行目データ」を
rowに入れる- 内側のループが、そのデータから「A1セル」→「B1セル」の順に
cellを取り出す
- 内側のループが、そのデータから「A1セル」→「B1セル」の順に
- 外側のループ が「2行目のデータ」を
rowに入れる- 内側のループが、そのデータから「A2セル」→「B2セル」の順に
cellを取り出す
- 内側のループが、そのデータから「A2セル」→「B2セル」の順に
どこまで処理されるのか:
max_row(終わりの行)を指定しなかった場合、「データが入っている一番下の行」まで自動で処理が続きます。データが100行あれば100行目まで、1万行あれば1万行目までループします。
指定したい場合は、iter_rows()の引数にmax_row = Xを渡してあげてください。
セルの書式(デザイン)を変更する
from openpyxl.styles import Font, PatternFill
# 太字・文字サイズ12ポイントにする設定を作成
bold_font = Font(bold=True, size=12)
# 背景色を黄色単色にする設定を作成
yellow_fill = PatternFill(patternType='solid', fgColor='FFFF00')
# A1セルに適用
ws["A1"].font = bold_font
ws["A1"].fill = yellow_fill
# 保存して反映
wb.save("styled.xlsx")
ポイント:
よく使う書式設定を冒頭にコーディングしておくことで、再利用性が高まります。
pandasでExcelを扱う
pandas は、Excelのデータを 「DataFrame(データフレーム)」 という表形式のデータとして一気に読み込みます。 細かいセルの装飾はできませんが、計算・集計・加工のスピードは圧倒的です。
Excelを読み込む
import pandas as pd
# Excelファイルを読み込んで DataFrame(表)にする
df = pd.read_excel("sample.xlsx")
# データを表示して確認
# () の中に何も書かないと、自動で「最初の5行」が表示されます
print(df.head())
# もし「3行だけ」見たい場合は、数字を指定します
print(df.head(3))
-
pd.read_excel()だけで、Excelの中身がプログラム内に取り込まれます - 1行目を自動的に「ヘッダー(列名)」として認識してくれます
データを加工する
pandasを使えば、列ごとの計算も一瞬です。
# 「年齢」列のすべてのデータに 1 を足す
df["年齢"] = df["年齢"] + 1
# 新しい列「備考」を追加して、全員に "確認済" と入れる
df["備考"] = "確認済"
print(df)
-
df["年齢"] + 1と書くだけで、その列のデータ全てに+1されます -
df["備考"] = "XXX"と書くだけで、備考列が追加されます
Excelとして書き出す
加工したデータを、新規Excelファイルとして保存する場合に便利です。
# 新しいファイル名で保存
# index=False は「行番号(0, 1, 2...)」を出力しないためのおまじない
df.to_excel("output.xlsx", index=False)
-
index=Falseを指定しないと、A列に連番(0, 1, 2...)が勝手に追加されてしまいます。Excelとして保存する場合は、基本的にFalseにしておくと綺麗
openpyxl と pandas の使い分け
| 目的 | 推奨ライブラリ |
|---|---|
| 書式付きExcel編集 | openpyxl |
| 大量データの集計 | pandas |
| 自動レポート作成 | pandas + openpyxl |
pandasで集計 → openpyxlで書式調整という使い方がおすすめです。
まとめ
- PythonでのExcel操作は効率化につながる
- 書式操作は openpyxl
- データ処理は pandas
次回もpython関連の記事を執筆予定です!
最後までお読みいただきありがとうございました!
もし「役に立った!」と思ったら、いいね・ストックをいただけると励みになります😊
参考リンク