【AI生成連載】自動化ノウハウ 第2回 OpenPyXLでExcelルーティン作業を爆速化
こんにちは!「自動化ノウハウ」連載の第2回へようこそ。前回は自動化の全体像や心構えについてお話ししましたが、今回はいよいよ実践編です。多くのオフィスワーカーが日々向き合っている「Excelのルーティン作業」を、PythonのライブラリOpenPyXLを使ってどのように効率化できるのか、初心者の方にもわかりやすく丁寧に解説していきます。
「毎月同じフォーマットにデータを転記している」「決まったセルに書式を設定するだけで数十分かかっている」——そんな悩みをお持ちの方は、ぜひ最後まで読んでみてください。
OpenPyXLとは?基本のキホン
OpenPyXLは、Pythonを使ってExcelファイル(.xlsx形式)を読み書きするためのライブラリです。マクロ(VBA)を使わずに、Pythonのシンプルな文法でExcel操作を自動化できるのが最大の魅力です。
インストール方法
OpenPyXLの導入はとても簡単です。以下のコマンドをターミナルやコマンドプロンプトで実行するだけでインストールが完了します。
pip install openpyxl
Pythonがすでにインストールされている環境であれば、数秒〜数十秒で準備が整います。
基本的な読み込み・書き込み
まずは基本操作として、Excelファイルを開いてセルの値を読み書きするコードを見てみましょう。
import openpyxl
# ファイルを開く
wb = openpyxl.load_workbook('sample.xlsx')
ws = wb.active
# セルの値を読み込む
value = ws['A1'].value
print(value)
# セルに値を書き込む
ws['B1'] = 'こんにちは'
# 保存する
wb.save('sample.xlsx')
このように、たった数行のコードでExcelファイルの読み書きができてしまいます。VBAに慣れていない方でも、Pythonのコードは直感的に理解しやすいと感じるはずです。
よくあるルーティン作業を自動化してみよう
OpenPyXLの基本がわかったところで、実際の業務でよくある「ルーティン作業」を自動化する方法を見ていきましょう。
複数シートのデータを集計する
複数のシートに分かれたデータを1つのシートにまとめる作業は、多くの職場で発生する定番のルーティン作業です。以下のコードでは、複数シートの合計値を1つのシートに集計しています。
import openpyxl
wb = openpyxl.load_workbook('monthly_data.xlsx')
summary_ws = wb['集計']
row = 2
for sheet_name in wb.sheetnames:
if sheet_name == '集計':
continue
ws = wb[sheet_name]
total = sum(cell.value for cell in ws['C'] if isinstance(cell.value, (int, float)))
summary_ws.cell(row=row, column=1, value=sheet_name)
summary_ws.cell(row=row, column=2, value=total)
row += 1
wb.save('monthly_data.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')
一度スクリプト化してしまえば、毎回同じ書式を手作業で設定する必要がなくなり、フォーマットの統一性も保たれます。
実践!日報データの自動整形スクリプト
ここでは、より実践的な例として「日報データを整形して見やすいレポートに変換する」スクリプトをご紹介します。
サンプルコード
import openpyxl
from openpyxl.styles import Font, Alignment
wb = openpyxl.load_workbook('daily_report.xlsx')
ws = wb.active
# ヘッダー行の装飾
for cell in ws[1]:
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal='center')
# 列幅の自動調整
for column_cells in ws.columns:
length = max(len(str(cell.value)) for cell in column_cells if cell.value)
ws.column_dimensions[column_cells[0].column_letter].width = length + 2
wb.save('daily_report_formatted.xlsx')
実行結果
このスクリプトを実行すると、ヘッダー行が太字・中央揃えになり、さらに列幅が自動で調整されるため、見やすいレポートが数秒で完成します。毎日の日報作成が習慣化している方は、こうした整形処理をぜひ自動化してみてください。
つまずきやすいポイントと解決策
OpenPyXLは便利なライブラリですが、初心者の方がつまずきやすいポイントもいくつかあります。ここで代表的なものを紹介します。
よくあるエラー
- ファイルが開いたまま保存しようとしてエラーになる:Excelでファイルを開いた状態でPythonから保存しようとすると、権限エラーが発生します。必ずExcel側でファイルを閉じてから実行しましょう。
- 数式の結果が取得できない:デフォルトでは数式そのものが返されます。計算結果を取得したい場合は
load_workbook(filename, data_only=True)のようにオプションを指定しましょう。
パフォーマンスの注意点
大量のデータ(数万行以上)を扱う場合、通常の読み込み方法では処理が遅くなることがあります。その場合は、以下のようにread_onlyモードやwrite_onlyモードを活用すると、メモリ効率と処理速度が大幅に改善されます。
wb = openpyxl.load_workbook('large_data.xlsx', read_only=True)
大規模なデータを扱う機会が増えてきたら、ぜひこのオプションも覚えておきましょう。
まとめ
今回は、OpenPyXLを使ってExcelのルーティン作業を自動化する方法について解説しました。基本的な読み書きから、複数シートの集計、書式設定、そして実践的なレポート整形まで、幅広い場面でOpenPyXLが活躍することがおわかりいただけたのではないでしょうか。
最初はコードを書くこと自体に戸惑うかもしれませんが、一度スクリプトを作ってしまえば、その後は何度でも同じ処理を一瞬で実行できるようになります。まずは自分の業務の中で「毎回同じことを繰り返している作業」を洗い出し、少しずつ自動化に挑戦してみてください。
次回の連載では、OpenPyXLをさらに発展させ、複数ファイルを一括処理する方法や、他のライブラリと組み合わせた応用テクニックをご紹介する予定です。お楽しみに!
\ IT・AI特化の就労支援・スキルアップ /

