【Python自動化入門②】OpenPyXLでExcelルーティン作業を爆速化
こんにちは!「Python自動化入門」連載の第2回です。前回はPythonの基本的な環境構築と、簡単なスクリプトの書き方についてご紹介しました。今回はいよいよ実務で大活躍する「Excel操作の自動化」に踏み込んでいきます。
毎日のように発生する「Excelファイルを開いて、データを入力して、保存する」という作業。これを手作業で繰り返していると、ミスも増えますし、時間もどんどん削られていきますよね。そこで登場するのがOpenPyXLというライブラリです。このライブラリを使えば、Pythonのコードから直接Excelファイルを操作できるようになり、ルーティン作業を劇的にスピードアップできます。
今回は、OpenPyXLの基本から実践的な使い方まで、初心者の方でも迷わず理解できるように丁寧に解説していきます。
①OpenPyXLとは?基本のインストールと準備
OpenPyXLってどんなライブラリ?
OpenPyXLは、Excelファイル(.xlsx形式)をPythonから読み書きするためのライブラリです。VBAを使わなくても、Pythonのコードだけでセルの値を取得したり、新しいシートを作成したり、書式を整えたりすることができます。VBAに比べて記述がシンプルで、他のPythonライブラリ(データ分析用のpandasなど)とも連携しやすいのが大きな魅力です。
インストール方法
OpenPyXLはpipコマンドで簡単にインストールできます。ターミナルやコマンドプロンプトで以下のコマンドを実行してください。
pip install openpyxl
インストールが完了したら、Pythonのスクリプト内で以下のようにインポートして使用します。
import openpyxl
これで準備は完了です。次のセクションから、実際にExcelファイルを操作していきましょう。
②Excelファイルの読み込みと書き込みの基本
ワークブックとワークシートの操作
OpenPyXLでは、Excelファイル全体を「ワークブック(Workbook)」、その中の各シートを「ワークシート(Worksheet)」として扱います。新しいファイルを作成する場合は以下のように書きます。
import openpyxl
# 新しいワークブックを作成
wb = openpyxl.Workbook()
# アクティブなシートを取得
ws = wb.active
ws.title = "売上データ"
# ファイルとして保存
wb.save("sample.xlsx")
既存のファイルを開きたい場合は、load_workbook()関数を使います。
wb = openpyxl.load_workbook("sample.xlsx")
ws = wb.active
セルの値を読み書きする
セルへの書き込みや読み込みは、セルのアドレス(例:"A1")を指定するだけで簡単に行えます。
# 値を書き込む
ws["A1"] = "商品名"
ws["B1"] = "売上金額"
# 値を読み込む
value = ws["A1"].value
print(value) # 出力: 商品名
行と列の番号で指定するcell(row=1, column=1)という書き方も可能です。ループ処理でセルを操作する際は、この書き方が特に便利です。
ws.cell(row=1, column=1, value="商品名")
③実践!複数シートやファイルを操作する自動化スクリプト
複数シートへのデータ書き込み
実務では複数のシートを扱うケースが多くあります。新しいシートを追加するにはcreate_sheet()を使います。
ws2 = wb.create_sheet(title="在庫データ")
ws2["A1"] = "商品コード"
ws2["B1"] = "在庫数"
wb.save("sample.xlsx")
既存ファイルへの追記処理
ルーティン作業でよくあるのが「既存のExcelファイルに、新しいデータを追加していく」というケースです。以下のように、最終行を取得してその次の行から書き込むことで、データを蓄積していく処理が実現できます。
wb = openpyxl.load_workbook("sample.xlsx")
ws = wb["売上データ"]
# 現在の最終行を取得
last_row = ws.max_row
# 新しいデータを追記
new_data = [["りんご", 1500], ["みかん", 1200]]
for i, row_data in enumerate(new_data, start=1):
for j, value in enumerate(row_data, start=1):
ws.cell(row=last_row + i, column=j, value=value)
wb.save("sample.xlsx")
このように、日々の売上データや入力フォームの内容をリストとして受け取り、自動で末尾に追記していくスクリプトを作れば、手作業での入力から解放されます。
④セルの書式設定で見やすい表を自動作成
フォントや色の設定
データを入力するだけでなく、見やすい表を自動で作成することもOpenPyXLの強みです。フォントの太字設定や、背景色の指定は以下のように行います。
from openpyxl.styles import Font, PatternFill
# 見出し行を装飾
ws["A1"].font = Font(bold=True, color="FFFFFF")
ws["A1"].fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
これをループ処理と組み合わせれば、見出し行全体を一括で装飾することができます。
for col in range(1, 3):
cell = ws.cell(row=1, column=col)
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
列幅・行高さの調整
文字が長いと列がはみ出してしまい、見た目が悪くなります。列幅は以下のように調整できます。
ws.column_dimensions["A"].width = 20
ws.column_dimensions["B"].width = 15
これらの書式設定をテンプレート化しておくことで、毎回同じ見た目の表を自動で生成でき、資料作成の手間を大幅に削減できます。
まとめ
今回は、OpenPyXLを使ったExcelルーティン作業の自動化について、基本から実践的な使い方までご紹介しました。
- OpenPyXLのインストールと基本的な使い方
- ワークブック・ワークシートの操作方法
- 複数シートや既存ファイルへのデータ追記処理
- 見やすい表を作るための書式設定
これらを組み合わせるだけで、日々発生する「Excelへの入力・集計・整形」といった作業をPythonに任せることができます。最初は覚えることが多いと感じるかもしれませんが、一度スクリプトを作ってしまえば、その後は圧倒的な時間短縮につながります。
次回は、pandasライブラリを使ったデータ集計・分析の自動化について解説していく予定です。OpenPyXLと組み合わせることで、さらに強力な自動化ルーティンが構築できますので、ぜひ次回もお楽しみください!
\ 初心者から未経験でプロを目指す /

