【Python】openpyxlとは?Excelファイルを自在に操作するための基礎と実践を解説

はじめに

Python openpyxl は、PythonでExcelファイルを操作するために広く利用されているライブラリです。
プログラミング初心者の皆さんにとって、Excelファイルの操作は日常的な業務にもつながりやすいテーマではないでしょうか。
このライブラリを使うことで、Excelファイルを読み書きしたり、フォーマットを設定したりといった作業を自動化できます。

業務では売上データや顧客情報などをExcelで扱うことがよくあります。
しかし、手作業で行うと時間がかかったり、ミスが増えてしまったりします。
そこでPythonとopenpyxlを組み合わせると、コードで処理を定義できるため、作業時間の短縮やヒューマンエラーの削減につながります。

本記事では、Pythonの初心者の皆さんでもわかりやすいように、openpyxlの基本的な使い方から実務での活用方法までを解説します。
各ステップで簡潔なコード例を紹介するので、気になったらぜひ試してみてください。

この記事を読むとわかること

  • openpyxlのインストール方法と準備の進め方
  • Excelファイルの読み込み・書き込みの基本
  • シートの作成やセル操作の方法
  • 実務における具体的な活用シーンと注意点

これらを踏まえて、Excelファイルの操作を自動化し、作業効率を高める一歩を踏み出すきっかけになれば嬉しいです。

Pythonとopenpyxlの概要

Excelファイルの操作といえばVBAを思い浮かべる方もいるかもしれません。
しかし、Pythonの世界ではExcelを扱うライブラリがいくつか存在しており、openpyxl はその代表的なものとして知られています。

openpyxlとは何か

openpyxl は、Pythonを使ってExcel(.xlsx形式)の読み書きを行うためのライブラリです。
次のような操作ができます。

  • 新規Excelファイルの作成
  • 既存Excelファイルの読み込み
  • セルへの値書き込み、値読み取り
  • セルのフォーマット設定(色、フォントなど)
  • 数式の設定やグラフの作成

プログラミング初心者の皆さんがExcelをプログラムで制御したいとき、まず最初に触れてみるのに適したライブラリです。

openpyxlのインストール方法

WindowsやmacOSなど、Pythonが動作する環境なら簡単にインストールできます。
Pythonのパッケージ管理システムであるpipを使って、次のコマンドを実行します。

pip install openpyxl

インストールが終わったら、実際にコードで呼び出せるようになります。
環境によっては pip3 を使う場合もあるので、Pythonがどのようにインストールされているかを一度確認すると安心です。

Excelファイルを新規作成する

まずは「PythonコードでExcelファイルを新規作成する方法」を見てみましょう。
Excelを1から作りたいケースは、定型フォーマットを毎回自動で用意したいときなどに役立ちます。

from openpyxl import Workbook

# 新しいExcelワークブックを作成
wb = Workbook()

# デフォルトのワークシートを選択(デフォルトシートは常に一つは存在する)
ws = wb.active

# セルA1に文字列を書き込む
ws['A1'] = 'こんにちは'

# セルB1に数値を書き込む
ws['B1'] = 100

# Excelファイルを保存する
wb.save('sample.xlsx')

上記のコードを実行すると、同じフォルダ内に 'sample.xlsx' というファイルが生成されます。
試しに開いてみると、A1セルに文字、B1セルに数値が書かれたExcelファイルが確認できるでしょう。

ワークシートの追加

複数のワークシートを同じExcelファイルに作成することもよくあります。
例として、月別の売上シートを追加するケースを考えてみましょう。

from openpyxl import Workbook

wb = Workbook()

# デフォルトシートを取得
default_ws = wb.active
default_ws.title = 'メインシート'

# 新しいシートを追加
sheet_january = wb.create_sheet(title='1月売上')
sheet_february = wb.create_sheet(title='2月売上')

# 追加したシートにデータを書き込む
sheet_january['A1'] = '1月の合計売上'
sheet_february['A1'] = '2月の合計売上'

wb.save('multi_sheet_example.xlsx')

上記の例では、デフォルトシートの名前を 'メインシート' に変更し、新たに '1月売上' と '2月売上' というシートを追加しています。
このようにして複数シートを作っておくと、実務上の管理がしやすくなります。

Excelファイルを読み込む

既存のExcelファイルからデータを取得したいケースも多いでしょう。
openpyxl を使えば、特定のセルや範囲を指定してデータを読み込めます。

from openpyxl import load_workbook

# 既存のExcelファイルを読み込む
wb = load_workbook('existing_data.xlsx')
ws = wb.active  # デフォルトシートを利用

# 指定したセルの値を読み取る
value_a1 = ws['A1'].value
value_b2 = ws['B2'].value

print(value_a1)
print(value_b2)

このように、 'A1''B2' のようにセルを文字列で指定し、.value で値を取得できます。
もしシート名がわかっている場合は、 wb['シート名'] のように明示的にシートを選ぶことも可能です。

指定セルの読み取り

上記の通り ws['A1'].value のようにセル番地を指定すると単一セルの値を取り出せますが、行や列で一括取得をしたい場合もあるでしょう。
そのような場合、iter_rows メソッドや iter_cols メソッドで複数のセルを繰り返し処理できます。

for row in ws.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):
    # row はタプルとして渡される
    for cell in row:
        print(cell.value)

iter_rows に引数を渡すことで、どの範囲を読み込むかを細かく制御できます。
たとえば min_row=1, max_row=5 は1行目から5行目、 min_col=1, max_col=3 はA列からC列を指します。
このようにして、行や列をまとめて読み込むほうが効率的な場合もあります。

複数セルの一括取得

行列を指定して簡単にすべてのセルを取得する方法もあります。
小規模なExcelファイルなら、指定範囲をまるごと読み出して処理するやり方がわかりやすいかもしれません。

cells = ws['A1':'C5']  # A1からC5までの範囲
for row in cells:
    for cell in row:
        print(cell.value)

これも同じように、行単位のタプルを順番に取得するイメージです。
初心者の方でも繰り返しの処理で扱えるので、少しコードを応用すれば集計処理や分析ロジックを組み込むことができます。

Excelファイルに書き込む

データを書き込む処理は、新規ファイルを作る場合だけではなく、既存ファイルに追記したいケースでもよく使われます。
openpyxlでは、読み込みと同じように単一のセルを指定したり、範囲指定でまとめて書き込んだりが可能です。

from openpyxl import load_workbook

wb = load_workbook('existing_data.xlsx')
ws = wb.active

# C1セルに文字列を上書き
ws['C1'] = '新しいデータ'

# 3行目から5行目のA列に数字を書き込む例
for row in range(3, 6):
    cell_ref = f'A{row}'
    ws[cell_ref] = row * 10  # 行番号×10の値を書き込む

wb.save('existing_data_updated.xlsx')

このコードでは、既存ファイルのC1に文字を書き込み、行番号を使ってA列に連続値を入れています。
こうした操作を繰り返すことで、任意のデータを自由に記入できます。

複数行・列への書き込み

大量のデータを一度に書き込みたいときは、リストや辞書などをうまく使うと良いでしょう。
例えば以下のようなリストを用意し、横方向や縦方向に書き込みを進める方法があります。

data_list = [
    ['商品A', 10, 1000],
    ['商品B', 5, 500],
    ['商品C', 8, 800],
]

current_row = 2  # A1などにヘッダーが入っている想定

for row_data in data_list:
    ws.cell(row=current_row, column=1, value=row_data[0])
    ws.cell(row=current_row, column=2, value=row_data[1])
    ws.cell(row=current_row, column=3, value=row_data[2])
    current_row += 1

ここでは ws.cell(row=r, column=c, value=val) を使っていますが、これによりプログラム的に行や列の位置を動的に決定できるようになります。
Excelの大規模データを扱う場合にも応用が効く方法です。

Excelファイルの保存

ファイルの保存は非常にシンプルで、Workbook または load_workbook で取得したインスタンスに対して、 wb.save('ファイル名') を呼び出すだけです。
新規ファイルを作成するときと、既存ファイルを更新するときで違いはありません。

ただし、うっかり同じファイル名で保存すると、既存のExcelが上書きされる点には注意が必要です。
また、ファイルを操作している際に「Excelでファイルを開きっぱなし」だと上書きが失敗することもあります。
これはExcelソフトがファイルをロックしてしまうためですので、ファイルを操作する前にExcelを閉じておく癖をつけると安心です。

ExcelファイルをPythonで扱うときは、開いている状態で上書きができないことがあります。ファイルを閉じてから操作するとトラブルを避けやすいです。

実務での活用例

実際にどういったシーンでopenpyxlが役立つのでしょうか。
Excelファイルを自動で生成・更新する機能は多くの場面で重宝されます。

数値集計やデータ抽出に利用する

たとえば、売上のデータを集計する業務を想像してみてください。
多くの企業で売上データはExcel形式で管理されており、それを毎日または毎週分析するケースがあります。
openpyxlを使えば、Excelファイルをまとめて読み込み、必要な行だけ抽出して集計したうえで、さらに結果を別シートや別ファイルに書き込むといった流れを自動化できます。

自動化のメリット は、繰り返し作業の手間削減や、手入力ミスの防止などです。
Excelの中には数千行や数万行のデータが入っていることもあるので、プログラムで処理することで効率的に作業できるでしょう。

レポート生成やテンプレートを自動化する

定期的に提出するレポートのテンプレートをExcelで管理しているケースがあります。
この場合、必要なセルだけ動的に書き換えて、毎週・毎月の定型レポートを自動的に完成させる、といったことが可能です。
たとえば以下のイメージで自動化できるでしょう。

  • テンプレートとなるExcelファイル(フォーマットだけ用意)をopenpyxlで読み込み
  • 今週のデータを集計し、該当するセルに書き込み
  • 完成したExcelファイルを保存して提出用フォルダに置く

これだけでも手作業を大幅に減らせるはずです。

注意点やトラブルシューティング

openpyxlを使う中で気をつけておきたいポイントをいくつか挙げます。
エラーになって戸惑う場面はなるべく減らしたいですよね。

セル形式の扱い

Excelのセルは、文字列・数値・日付などいろいろな型を持ちます。
しかし、openpyxlで値を読み込んだ場合には、Pythonが持つ基本的な型(str, int, float, datetimeなど)で表現されることが多いです。
したがって、Excel上では同じように見えるセルでも、実際には異なる型のデータが入っていることがある ため、読み込んでみて期待どおりの型になっているかを確認しましょう。

また、Excelで表示形式を設定していても、openpyxlが認識するのは基本的に「セルに格納されている実際の値」です。
たとえば 0.5 をパーセント表示しているセルは、Excel上では「50%」と見えていても、openpyxlで取得すると 0.5 の数値になることがあります。

大規模ファイルの処理

Excelファイルのサイズが非常に大きい場合は、読み込みや書き込みで時間がかかったりメモリを多く消費したりすることがあります。
可能であれば、複数のファイルに分割する、あるいはCSV形式にするなど、パフォーマンス面を工夫するといいかもしれません。
特に何十万行といったレベルになると、Pandasなどほかのライブラリと連携する方法も検討すると良いでしょう。

Excelファイルがあまりにも大きい場合は、作業が遅くなることがあります。必要に応じてCSV形式に変換するなど、ファイル分割を考えるのも手段です。

openpyxlでよく使われる機能

openpyxlは単純な読み書きだけでなく、Excelに備わるさまざまな機能をコードから操作できます。
ここでは代表的な機能をいくつか見ていきましょう。

セルのフォーマット設定

セルの背景色やフォントを設定できる機能があります。
業務で提出するExcelファイルを見やすくするためにフォーマットを自動化するのは意外に便利です。
例えば背景色を変更するには以下のようなコードを書きます。

from openpyxl.styles import PatternFill, Font

# 背景色と文字のフォントを設定
cell = ws['A1']
cell.fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
cell.font = Font(color='FF0000', bold=True)

このように、 openpyxl.styles モジュールに含まれるオブジェクトを活用すると装飾が可能です。
チーム内で提出するExcelなどでも、必要なポイントだけ自動で強調表示できるとわかりやすくなりますね。

数式の設定

Excelのセルに対して数式を設定する場合は、セルに文字列として数式を渡します。
たとえば合計を計算したいときには次のようになります。

ws['C10'] = '=SUM(C2:C9)'

このように書くと、C2からC9までの合計をC10に反映できます。
Excelで開いたときに自動計算してくれるため、Pythonで合計値を計算するのではなく、Excelに数式を残すのもひとつの方法です。

グラフの作成

openpyxlには、Excelグラフを生成する機能も備わっています。
細かい設定はやや複雑ですが、棒グラフや折れ線グラフをコードから作成し、Excelファイルに埋め込むことができます。
例えば、以下のようなコードで棒グラフを作成するイメージです。

from openpyxl.chart import BarChart, Reference

bar_chart = BarChart()
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=5)
bar_chart.add_data(data, titles_from_data=True)

# A1セルの下あたりにグラフを配置
ws.add_chart(bar_chart, "E1")

このコードは、B列の1行目から5行目のデータを取り出して棒グラフを作成し、シート上のE1セル付近にグラフを配置します。
グラフのスタイルやタイトル設定などは、追加でプロパティを指定していくこともできます。

まとめ

ここまで、Python openpyxl を使ってExcelファイルを読み書きする方法や、実務での活用例、注意点などを紹介してきました。
初心者の皆さんでもわかりやすいように、具体的なコード例や使い方の流れを示しましたが、いかがでしょうか。

Excelファイルはビジネスの現場において非常に身近な存在ですが、プログラミングと組み合わせることで手作業の多くを自動化できます。
定型業務を効率化し、より本質的な業務に集中するための手段として、openpyxlはとても有用です。

最初はシンプルな読み書きだけでも、Excel操作をコード化すると新鮮に感じるでしょう。
慣れてきたら、セルの書式設定やグラフ生成などを組み合わせて使い勝手をさらに高めてみてください。

このライブラリをうまく活用して、日々の業務に役立てたり、オリジナルのツールを作ったりしてみてはいかがでしょうか。
みなさんのプログラミング学習や業務効率化に少しでも参考になることを願っています。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。