はじめに:この記事で解決できること
Pythonのopenpyxlライブラリを使えば、Excelのグラフ作成を自動化できて非常に便利ですよね。しかし、いざグラフを作ろうとしたとき、「どのセルのデータを、どうやってグラフに反映させればいいの?」と手が止まってしまった経験はありませんか?
グラフ作成の心臓部とも言えるのが、今回解説する**openpyxl.chart.Reference**クラスです。このReferenceを理解しないままでは、openpyxlでのグラフ作成はマスターできません。
この記事を最後まで読めば、あなたのそんな悩みはスッキリ解決します。
- PythonのopenpyxlでExcelグラフを作成する際に、どのセルのデータをグラフにすればよいか分からず困っている
openpyxl.chart.Referenceクラスの基本的な役割と使い方がわかる- グラフの**「データ系列(Y軸の値)」**を
Referenceオブジェクトで指定する方法(add_data)がわかる - グラフの**「カテゴリ軸(X軸のラベル)」**を
Referenceオブジェクトで指定する方法(set_categories)がわかる - これらを使って、Excelの特定の範囲のデータを思い通りにグラフ化できるようになる
Referenceを使いこなし、退屈なグラフ作成作業から解放されましょう!
準備:グラフ作成の土台となるデータを用意する
まずは、解説のベースとなる簡単な売上データが入ったExcelファイルを作成しましょう。以下のPythonコードを実行すると、reference_sample.xlsxというファイルが生成されます。
このデータを使って、グラフの作成方法を学んでいきます。
import openpyxl
# ワークブックとアクティブなシートを準備
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "月別売上データ"
# グラフの元となるサンプルデータを書き込む
rows = [
("月", "売上(万円)"),
("4月", 120),
("5月", 155),
("6月", 140),
("7月", 180),
("8月", 175),
]
for row in rows:
ws.append(row)
# この時点でのExcelファイルを保存
wb.save("reference_sample.xlsx")このコードを実行すると、A列に月、B列に売上が入ったシンプルなシートができます。ここからグラフを作成していきます。
Referenceオブジェクトとは? Excelの「範囲選択」をコードで実現
では、この記事の主役である**Reference**オブジェクトとは一体何者なのでしょうか?
結論から言うと、Referenceオブジェクトは、ワークシート上の特定のセル範囲(例:「B2セルからB6セルまで」)をプログラム上で表現するための設計図のようなものです。
一番わかりやすいのは、Excelでマウスをドラッグしてセル範囲を選択する操作を、Pythonコードで仮想的に行っているイメージです。
グラフを作成する際には、openpyxlに対して「この範囲の数値をグラフの棒の高さにしてね」「そして、こちらの範囲の文字列をグラフの横軸のラベルとして使ってね」といった指示を出す必要があります。その「この範囲」を定義するのがReferenceオブジェクトの最も重要な役割なのです。
【最重要】add_data()でデータ系列(Y軸の値)を設定する
グラフの見た目を直接決定する、棒の高さや線の位置。これらをデータ系列と呼びます。
結論として、グラフにしたい数値データの範囲をReferenceで作成し、それをchart.add_data()メソッドに渡すことで、データ系列が設定されます。
Referenceの基本的な引数
Referenceオブジェクトを作成する際には、主に以下の引数を指定します。
worksheet: 対象となるワークシートオブジェクト。min_col: 範囲の開始列の番号(A列=1, B列=2…)。min_row: 範囲の開始行の番号。max_col: 範囲の終了列の番号。max_row: 範囲の終了行の番号。
具体的なコード例
先ほど作成したExcelデータの「売上(万円)」の部分(B1セルからB6セルまで)をグラフのデータ系列として指定してみましょう。
from openpyxl.chart import BarChart, Reference # Referenceをインポート
# (前述のExcel作成コードの続き)
# 1. グラフオブジェクトを作成
chart = BarChart()
chart.title = "月別売上推移"
# 2. データ系列の範囲をReferenceで指定
# B1セルからB6セルまで (列=2, 行=1から6)
values = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=6)
# 3. グラフにデータ系列を追加
# titles_from_data=Trueで、B1セルの「売上(万円)」を凡例名として使用
chart.add_data(values, titles_from_data=True)add_dataの第2引数titles_from_data=Trueは非常に便利です。これを指定すると、Referenceで指定した範囲の先頭セル(この場合はB1セル)の値を、グラフの凡例(「これは何のデータか」を示すラベル)として自動で使ってくれます。
set_categories()でカテゴリ軸(X軸のラベル)を設定する
データ系列(値)を設定しただけでは、それぞれの値が「何に対応するものなのか」が分かりません。例えば、売上120万円が何月のものなのか、グラフに示す必要があります。これをカテゴリ軸(一般的にはX軸)と呼びます。
結論は、グラフの横軸に表示したいラベルデータの範囲を、もう一つ別のReferenceオブジェクトで作成し、それをchart.set_categories()メソッドに渡します。
なぜadd_dataと分かれているのか?
役割が明確に違うからです。
add_data: グラフで描画される**「値」そのもの**(棒の高さなど)を担当します。set_categories: それらの値が**「何のデータか」を示すラベル**(横軸の項目名)を担当します。
この2つを組み合わせることで、初めて意味のあるグラフが完成します。
具体的なコード例
「月」のデータ(A2セルからA6セルまで)をカテゴリ軸として設定しましょう。
# (add_dataのコードの続き)
# 4. カテゴリ軸の範囲をReferenceで指定
# A2セルからA6セルまで (列=1, 行=2から6)
# ※今回はタイトル行(A1)は不要なので、2行目から指定
labels = Reference(ws, min_col=1, min_row=2, max_row=6)
# 5. グラフにカテゴリ軸を設定
chart.set_categories(labels)ここでは、カテゴリ名にヘッダー(A1セルの”月”)は不要なので、min_row=2と指定しているのがポイントです。
実践:Referenceを使ってグラフを完成させる全コード
それでは、これまでのステップをすべて統合し、グラフを実際にExcelファイルへ追加して保存するまでの完全なコードを見てみましょう。このコードをコピペして実行すれば、すぐに結果を確認できます。
import openpyxl
from openpyxl.chart import BarChart, Reference
# ワークブックとアクティブなシートを準備
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "月別売上データ"
# グラフの元となるサンプルデータを書き込む
rows = [
("月", "売上(万円)"),
("4月", 120),
("5月", 155),
("6月", 140),
("7月", 180),
("8月", 175),
]
for row in rows:
ws.append(row)
# --- ここからがグラフ作成の本番 ---
# 1. グラフオブジェクトを作成 (今回は棒グラフ)
chart = BarChart()
chart.title = "月別売上推移"
chart.y_axis.title = "売上高(万円)"
chart.x_axis.title = "月"
# 2. データ系列の範囲をReferenceで指定 (B1:B6)
values = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=6)
chart.add_data(values, titles_from_data=True)
# 3. カテゴリ軸の範囲をReferenceで指定 (A2:A6)
labels = Reference(ws, min_col=1, min_row=2, max_row=6)
chart.set_categories(labels)
# 4. ワークシートにグラフを追加 (D2セルを左上隅とする)
ws.add_chart(chart, "D2")
# 5. 最終的なExcelファイルを保存
wb.save("reference_chart_complete.xlsx")このコードを実行してreference_chart_complete.xlsxを開くと、4月から8月までの売上データが正しく反映された棒グラフがD2セルから配置されているはずです。
まとめ
今回は、openpyxlでグラフを自動化する上で避けては通れないReferenceオブジェクトについて、その役割と具体的な使い方を解説しました。
最後に、重要なポイントを振り返りましょう。
Referenceオブジェクトは、グラフの元となるセル範囲を指定するための必須ツールです。- グラフの数値データ(棒の高さなど)は、
Referenceを作成して**add_data()**で設定します。 - グラフのラベルデータ(横軸の項目名など)は、別の
Referenceを作成して**set_categories()**で設定します。 min_col,min_row,max_col,max_rowを使いこなすことで、ワークシート上のどんな範囲のデータも自由にグラフ化できます。
Referenceをマスターすれば、openpyxlを使ったグラフ自動化のレベルが格段に上がり、日々の定型業務が飛躍的に効率化します。ぜひ、今回のコードを参考に、ご自身の業務でも活用してみてください。


コメント