この記事でできるようになること
この記事では、Python初心者でも「Excel操作の自動化」ができるようにライブラリ OpenPyXL(オープンパイエクセル) の使い方をインストールから実践コード、よく使う関数一覧まで 一つひとつ丁寧に解説します。
Excel操作の自動化といえば以前からVBA(Visual Basic for Application)が利用されてきましたが、これからも使えるとはいえすでに開発を止めていることとプログラミング言語としてもかなり古くほかのプログラミングに使えないといったデメリットもあるためこれからプログラミングを始めるのであればPythonをお勧めします。
*Pythonの環境構築がまだの方はこちらから。
OpenPyXLとは?
OpenPyXL は、PythonでExcelファイル(.xlsx)を読み書き・編集・作成 できるライブラリです。たとえばこんなことができます。
- Excelファイルの自動作成
- データの書き込み・読み込み
- 既存のExcelの編集
- 罫線やフォントの設定
- グラフや数式の追加
Excelを毎日手作業で更新している人にとって、OpenPyXLは最強の時短ツール になります!
OpenPyXLのインストール
PowerShellまたはコマンドプロンプトから以下を実行してOpenPyXLをインストールします。
pip install openpyxl
基本的な使い方
Excelファイルの作成
from openpyxl import Workbook
# 新しいExcelファイルを作成
wb = Workbook()
# アクティブなシートを取得
ws = wb.active
# シート名を変更
ws.title = "売上データ"
# セルに書き込み
ws["A1"] = "商品名"
ws["B1"] = "数量"
ws["C1"] = "金額"
# ファイルを保存
wb.save("sample.xlsx")
実行するとカレントディレクトリ(現在のフォルダ・ディレクトリ)にsample.xlsxが作成されます。
既存のExcelを開いて編集
from openpyxl import load_workbook
# 既存のファイルを開く
wb = load_workbook("sample.xlsx")
ws = wb["売上データ"]
# データを書き込み
ws["A2"] = "りんご"
ws["B2"] = 5
ws["C2"] = 300
# 保存
wb.save("sample.xlsx")
ループで複数行を書き込む
複数のデータを一気に書き込むこともできます。
data = [
["商品名", "数量", "金額"],
["スピンドル", 5, 3000],
["ベースプレート", 2, 12000],
["ボルト", 16, 40]
]
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
for row in data:
ws.append(row)
wb.save("parts.xlsx")
ws.append() を使うと、リストの中身をそのまま行として追加できます。
Excelファイルからデータ読み取り
Excelの中身をPythonで取得することもできます。
from openpyxl import load_workbook
wb = load_workbook("parts.xlsx")
ws = wb.active
# A列の値をすべて取得
for cell in ws["A"]:
print(cell.value)
範囲を指定して取り出すには
for row in ws["A1:C4"]:
for cell in row:
print(cell.value, end="\t")
print()
数式を入れる
Excelの「=SUM()」のような数式もそのまま使えます。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws["A1"], ws["A2"], ws["A3"] = 10, 20, 30
ws["A4"] = "=SUM(A1:A3)" # 合計を計算
wb.save("formula.xlsx")
グラフの作成
グラフの作成も可能です。
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
wb = Workbook()
ws = wb.active
# データ作成
ws.append(["商品", "売上"])
ws.append(["スピンドル", 5, 3000])
ws.append(["ベースプレート", 2, 12000])
ws.append(["ボルト", 16, 40])
# グラフ範囲を指定
data = Reference(ws, min_col=2, min_row=1, max_row=4)
categories = Reference(ws, min_col=1, min_row=2, max_row=4)
chart = BarChart()
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
chart.title = "売上グラフ"
ws.add_chart(chart, "E2")
wb.save("chart.xlsx")
注意点
.xls(古い形式)はサポートされません。.xlsx を使いましょう。
保存時に同じ名前を指定すると上書き保存されます。
よく使われるOpenPyXL関数一覧
| 機能 | 関数・メソッド | 説明 |
|---|---|---|
| 新規作成 | Workbook() | 新しいExcelを作成 |
| 保存 | wb.save(filename) | ファイルを保存 |
| 読み込み | load_workbook(filename) | 既存のファイルを開く |
| シート取得 | wb.active / wb[sheetname] | アクティブシート or 名前で取得 |
| シート一覧 | wb.sheetnames | すべてのシート名を取得 |
| 行追加 | ws.append(list) | 行を追加 |
| セル参照 | ws["A1"] | セルを指定して操作 |
| 範囲取得 | ws["A1:C10"] | セル範囲を取得 |
| 値の取得 | cell.value | セルの中身を取得 |
| フォント設定 | Font(bold=True, color="FF0000") | 太字や色変更 |
| 背景色設定 | PatternFill(start_color="FFFF00", fill_type="solid") | セルの塗りつぶし |
| 数式設定 | ws["A4"] = "=SUM(A1:A3)" | 数式を設定 |
| グラフ作成 | BarChart(), LineChart() | 棒グラフ・折れ線グラフなど |
まとめ
OpenPyXLを使えば、
Excelでの繰り返し作業や日次レポートの更新を自動化 できます!
基本を覚えれば、
- 日報の自動作成
- データ集計+グラフ生成
- 他のシステムから出力されたExcelの整形
など、業務の効率化に直結します


コメント