日々の業務で発生するデータ集計とレポート作成。特に、数値を視覚的に分かりやすく伝えるためのグラフ作成に、多くの時間を費やしていないでしょうか?手作業でのグラフ作成は、手間がかかるだけでなく、データの更新があるたびに修正が必要になり、非常に面倒です。
もし、その作業がPythonで自動化できるとしたらどうでしょう。
この記事では、Pythonの定番ライブラリ**openpyxlを使い、Excelの円グラフ(PieChart)**作成を自動化する方法を、基本から応用まで徹底的に解説します。
この記事を最後まで読めば、あなたの手元には以下の知識が身についているはずです。
openpyxlを使った円グラフ作成の全手順- データの範囲を動的に指定する
Referenceオブジェクトの深い理解 PieChartとPieChart3Dの具体的な実装コード- タイトルやデータラベル設定など、グラフを実用レベルに仕上げるカスタマイズ術
面倒なデータ可視化のプロセスを自動化し、より創造的な業務に時間を使いましょう!
まずは準備から:openpyxlのインストール
何はともあれ、openpyxlライブラリがなければ始まりません。 openpyxlは、PythonからExcelファイル(.xlsx形式)を自在に操るための強力なライブラリです。ターミナルやコマンドプロンプトを開き、以下のpipコマンドでインストールしてください。
pip install openpyxlすでに環境に導入済みの方は、このステップはスキップして問題ありません。本記事のコードは、近年のバージョンであれば広く対応しています。
円グラフ作成の全体像:4つの基本ステップ
openpyxlでグラフを作成する際の考え方は、人間がExcelを操作する手順とよく似ています。まず、この4つの基本ステップを頭に入れておくと、コードの見通しが格段に良くなります。
- データの用意: グラフの元となるデータをExcelシート上に準備(書き込み)します。
- グラフオブジェクトの作成:
PieChartクラスを使い、円グラフの設計図を作成します。 - データ範囲の指定: 作成したグラフに、シート上のどのデータとラベルを使うかを
Referenceオブジェクトで教えます。 - グラフの配置と保存: グラフをシートの特定の位置に追加し、Excelファイルとして保存します。
この流れに沿って、具体的なコードと共に各ステップを詳しく見ていきましょう。
実践コード:基本的な円グラフ(PieChart)を作ってみる
百聞は一見に如かず。まずは、シンプルな円グラフを作成する全体のコードをご覧ください。 このコードを実行すると、フルーツの販売数をまとめた円グラフ付きのExcelファイルが自動で生成されます。
import openpyxl
from openpyxl.chart import PieChart, Reference
# 【ステップ1】Excelブックとシート、そしてデータの用意
# 新しいワークブックを作成
wb = openpyxl.Workbook()
# アクティブなシートを選択
ws = wb.active
ws.title = "PieChart Demo"
# シートに書き込むデータ
source_data = [
['商品カテゴリ', '売上個数'],
['リンゴ', 78],
['バナナ', 55],
['ぶどう', 42],
['メロン', 25],
]
# データをシートに1行ずつ追加
for row in source_data:
ws.append(row)
# 【ステップ2】グラフオブジェクトの作成
pie = PieChart()
# 【ステップ3】データ範囲の指定
# ラベルの範囲 (A2からA5まで)
labels = Reference(ws, min_col=1, min_row=2, max_row=5)
# データの範囲 (B2からB5まで)
data = Reference(ws, min_col=2, min_row=2, max_row=5)
# グラフにデータとラベルを設定
pie.add_data(data, titles_from_data=False)
pie.set_categories(labels)
# 【ステップ4】グラフの配置と保存
# グラフのタイトルを設定
pie.title = "商品カテゴリ別 売上個数"
# グラフを "D2" のセルを左上にして配置
ws.add_chart(pie, "D2")
# ファイルを保存
wb.save("sales_report_pie.xlsx")
print("円グラフ付きのExcelファイル'sales_report_pie.xlsx'を作成しました。")コードの徹底解説
ステップ1: データの用意
wb = openpyxl.Workbook()
ws = wb.active
# ... (中略) ...
for row in source_data:
ws.append(row)ここでは、まず新しいExcelブックとシートを作成しています。そして、Pythonのリストで定義したsource_dataを、ws.append()を使ってシートの1行目から順に書き込んでいます。これが可視化の元データとなります。
ステップ2: グラフオブジェクトの作成
from openpyxl.chart import PieChart, Reference
pie = PieChart()openpyxl.chartモジュールから、円グラフを担当するPieChartと、データ範囲を指定するReferenceをインポートします。そして、PieChart()を呼び出すことで、空の円グラフオブジェクトpieを生成します。
ステップ3: データ範囲の指定
ここがopenpyxlでのグラフ作成における核心部分です。
labels = Reference(ws, min_col=1, min_row=2, max_row=5)
data = Reference(ws, min_col=2, min_row=2, max_row=5)Referenceは、「このワークシート(ws)の、何列目から何列目、何行目から何行目までを対象にします」という情報を格納するオブジェクトです。
labels: グラフの凡例や項目名(リンゴ、バナナ…)を指定。A列(min_col=1)の2行目から5行目までを範囲としています。data: グラフの数値(78, 55…)を指定。B列(min_col=2)の2行目から5行目までを範囲としています。
そして、作成した範囲情報をpie.add_data()とpie.set_categories()でグラフオブジェクトに紐付けます。
ステップ4: グラフの配置と保存
pie.title = "商品カテゴリ別 売上個数"
ws.add_chart(pie, "D2")
wb.save("sales_report_pie.xlsx")最後に、pie.titleでグラフに見やすいタイトルを付け、ws.add_chart()でシート上のどこに配置するかを指定します。"D2"は「D2セルをグラフの左上隅として配置する」という意味です。 仕上げにwb.save()でファイルに書き出せば、自動化の完了です。
立体的に表現!3D円グラフ(PieChart3D)への応用
報告書の見栄えを少しリッチにしたい場合、3D円グラフが役立ちます。openpyxlでは、驚くほど簡単に3Dグラフへ変更できます。
先ほどのコードの2箇所を変更するだけです。
# 変更前
# from openpyxl.chart import PieChart, Reference
# pie = PieChart()
# 変更後
from openpyxl.chart import PieChart3D, Reference # PieChart3Dをインポート
pie = PieChart3D() # PieChart3Dオブジェクトを使うインポートするクラスと、インスタンス化するクラスをPieChart3Dに変えるだけで、Excel上では立体的な円グラフが描画されます。他のコード(データ範囲の指定やタイトルの設定など)は全く同じように機能します。ぜひ試してみてください。
実用性を高めるカスタマイズ術
基本的なグラフが作れるようになったら、次はより情報を分かりやすく伝えるためのカスタマイズに挑戦しましょう。
各要素の数値を表示する(データラベル)
グラフに実際の数値を表示すると、比率だけでなく具体的な値も一目でわかります。 dataLabels(データラベル)オブジェクトのプロパティをTrueに設定します。
# グラフオブジェクト`pie`を作成した後に追加
from openpyxl.chart.label import DataLabelList
pie.dataLabels = DataLabelList()
pie.dataLabels.showVal = True # 数値を表示
pie.dataLabels.showPercent = True # パーセンテージも表示showValで実数値を、showPercentでパーセンテージを表示できます。両方をTrueにすると、両方表示することも可能です。
特定の項目を目立たせる(explode)
プレゼンテーションなどで、特定のデータ項目を強調したい場合に使えるのがexplode(切り出し)機能です。
# グラフにデータを設定した後に追加
# 1番目の要素(リンゴ)を15%切り出す
slice = pie.series[0].points[0] # インデックスは0から始まる
slice.graphicalProperties.explosion = 15 # 切り出す割合(%)このコードは、グラフのデータ系列(series)のうち、最初のデータ点(points[0]、今回はリンゴ)を15%だけ外側にずらして表示します。これにより、特定のデータを視覚的にハイライトできます。
まとめ
本記事では、Pythonのopenpyxlライブラリを用いてExcelの円グラフ作成を自動化する方法を徹底的に解説しました。
重要なポイントを最後にもう一度整理します。
- 基本の4ステップ: 「データ準備 → オブジェクト作成 → 範囲指定 → 配置・保存」の流れを意識する。
Referenceが鍵:Reference(ws, min_col, min_row, ...)でグラフ化するセル範囲を正確に定義する。- クラスの使い分け: 平面なら
PieChart、立体ならPieChart3Dを使い分ける。 - カスタマイズ:
dataLabelsやexplosionで、より伝わりやすいグラフに仕上げる。
定期的なレポート作成など、繰り返し発生するグラフ作成業務は、まさに自動化に最適なタスクです。この記事をきっかけに、面倒な手作業をPythonに任せ、あなたの貴重な時間をより価値のある仕事に使いましょう。


コメント