Excelグラフ作成は「データを“見える化”し、説得力のある資料を自動生成する」ための最強スキル
Excel業務自動化の中でも、グラフ作成の自動化は効果が非常に大きいです。
なぜなら、実務では次のような場面が多いからです。
- 売上推移を自動でグラフ化したい
- 月次レポートを毎回同じフォーマットで作りたい
- データ更新 → グラフ更新を自動化したい
- 手作業でグラフを作る時間をゼロにしたい
Python(openpyxl)を使えば、棒グラフ・折れ線・円グラフなどをExcelに直接描画できます。
初心者でも理解しやすいように、基本から実務テンプレまで丁寧に解説します。
グラフ作成の基本構造(最重要ポイント)
グラフ作成は必ず3ステップで構成される
- Reference:グラフに使うセル範囲を指定
- Chart:グラフ本体を作成
- add_data / set_categories:データとラベルを設定し、シートに配置
この3つを理解すれば、どんなグラフでも作れます。
棒グラフ(BarChart)の基本
データ → 棒グラフを作成する最小コード
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
wb = Workbook()
ws = wb.active
# データ作成
data = [
["項目", "値"],
["A", 20],
["B", 30],
["C", 50],
["D", 40],
]
for row in data:
ws.append(row)
# 値の範囲(B2〜B5)
values = Reference(ws, min_col=2, min_row=2, max_row=5)
# グラフ作成
chart = BarChart()
chart.title = "サンプル棒グラフ"
# データ追加
chart.add_data(values)
# シートに配置
ws.add_chart(chart, "E2")
wb.save("bar_chart.xlsx")
Python深掘りポイント
Referenceがグラフ作成の最重要要素add_chart(chart, "E2")でグラフの左上位置を指定- 棒グラフは「比較」を見せるのに最適
折れ線グラフ(LineChart)
折れ線グラフの例
from openpyxl.chart import LineChart, Reference
chart = LineChart()
chart.title = "折れ線グラフ"
values = Reference(ws, min_col=2, min_row=2, max_row=5)
chart.add_data(values)
ws.add_chart(chart, "E15")
Python深掘りポイント
- 折れ線は「推移」を見せるのに最適
- 棒グラフと使い方はほぼ同じ
円グラフ(PieChart)
円グラフの例
from openpyxl.chart import PieChart, Reference
chart = PieChart()
chart.title = "円グラフ"
labels = Reference(ws, min_col=1, min_row=2, max_row=5)
values = Reference(ws, min_col=2, min_row=2, max_row=5)
chart.add_data(values, titles_from_data=False)
chart.set_categories(labels)
ws.add_chart(chart, "E25")
Python深掘りポイント
- 円グラフは set_categories() でラベルを指定する必要がある
- 割合の可視化に最適
実務テンプレ①:売上推移グラフを自動生成
月次売上(A列:月、B列:売上)を折れ線グラフ化
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
wb = load_workbook("sales.xlsx")
ws = wb["売上"]
chart = LineChart()
chart.title = "売上推移"
values = Reference(ws, min_col=2, min_row=1, max_row=13)
labels = Reference(ws, min_col=1, min_row=2, max_row=13)
chart.add_data(values, titles_from_data=True)
chart.set_categories(labels)
ws.add_chart(chart, "D2")
wb.save("sales_report.xlsx")
Python深掘りポイント
- 月次レポートで最も使われるパターン
titles_from_data=Trueで1行目を系列名として扱う
実務テンプレ②:複数系列の棒グラフ(前年比比較)
今年と去年の売上を比較する棒グラフ
from openpyxl.chart import BarChart, Reference
chart = BarChart()
chart.type = "col"
chart.title = "前年比比較"
values = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=13)
chart.add_data(values, titles_from_data=True)
labels = Reference(ws, min_col=1, min_row=2, max_row=13)
chart.set_categories(labels)
ws.add_chart(chart, "F2")
Python深掘りポイント
min_col〜max_colを広げると複数系列をまとめて追加できる- 前年・今年の比較グラフに最適
実務テンプレ③:グラフ専用シート(Chartsheet)に出力
グラフだけを大きく表示したい場合
chart_sheet = wb.create_chartsheet()
chart_sheet.add_chart(chart)
wb.save("chart_sheet.xlsx")
Python深掘りポイント
- プレゼン資料向けに便利
- グラフを大きく見せたいときに最適
実務テンプレ④:データ更新 → グラフ更新を自動化
データを書き換えてグラフを再保存
ws["B5"].value = 999 # データ更新
wb.save("updated_chart.xlsx")
Python深掘りポイント
- グラフはセル参照なので、データ更新だけで自動反映
- 「毎月データ更新 → グラフ自動更新」が簡単に実現
Excelグラフ作成を業務で設計するときの視点
- Reference → Chart → add_data の3ステップが最重要
- 棒グラフ=比較、折れ線=推移、円グラフ=割合
- 複数系列は min_col〜max_col を広げるだけ
- グラフ専用シートで見やすい資料が作れる
- データ更新だけでグラフが自動反映される

