PythonとopenpyxlでExcelグラフ作成を自動化!LineChartの基本的な使い方から応用まで

openpyxl

Pythonを使ったデータ処理やレポート作成の自動化は非常に強力ですが、「最後のExcelグラフ作成だけは手作業で…」なんてことになっていませんか?

定期的なレポート作成において、グラフ作成は同じことの繰り返しになりがちで、時間もかかります。もし、データ処理からグラフ作成まで一気通貫で自動化できたら、業務はもっと効率的になるはずです。

この記事では、Pythonライブラリ**openpyxl**を使い、Excelの折れ線グラフ(LineChart)作成を完全に自動化する方法を、基本から応用まで丁寧に解説します。

この記事を読めば、あなたは次のスキルを習得できます。

  • openpyxlを使った基本的な折れ線グラフの作り方
  • グラフのタイトルや軸ラベルを自由に設定するカスタマイズ方法
  • 複数のデータを1つのグラフにまとめる応用的なグラフ作成術

サンプルコードはすべてコピー&ペーストして試せるものばかりです。さあ、面倒なグラフ作成作業から解放されましょう!


はじめに:なぜopenpyxlでグラフを作成するのか?

Excel作業の定型化と時間短縮

最大のメリットは、圧倒的な時間短縮です。一度Pythonスクリプトを作成してしまえば、あとは実行するだけでグラフが完成します。毎月、毎週発生するレポート作成のような定型業務にかかる時間を大幅に削減できます。

ミスのない正確なグラフ生成

手作業には、データ範囲の選択ミスや設定のし忘れといったヒューマンエラーがつきものです。コードによる自動化は、決められた手順を正確に再現するため、常にミスなく一貫した品質のグラフを生成することができます。


準備:openpyxlをインストールしよう

まずは、openpyxlライブラリを使えるように準備しましょう。もし、まだインストールしていない場合は、お使いのターミナルやコマンドプロンプトで以下のコマンドを実行してください。

pip install openpyxl

Successfully installed openpyxl...といったメッセージが表示されればインストール完了です。


基本的な折れ線グラフ(LineChart)の作り方【コピペOK】

それでは、具体的なコードを見ながら、折れ線グラフを作成する手順を一つずつ解説します。ここでは、シンプルな「月ごとのアクセス数」のデータをグラフ化してみます。

Step 1: 必要なモジュールをインポートする

最初に、Excelファイルを操作するためにWorkbook、折れ線グラフを作成するためにLineChart、そしてグラフ化するデータの範囲を指定するためにReferenceopenpyxlからインポートします。

from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference

Step 2: ワークブックとワークシートを準備する

新しいExcelファイル(ワークブック)を作成し、作業対象となるシート(ワークシート)を取得します。シートには分かりやすい名前を付けておきましょう。

# 新しいワークブックを作成
wb = Workbook()
# アクティブなワークシートを取得
ws = wb.active
ws.title = "月次アクセス数"

Step 3: グラフ化するサンプルデータを書き込む

グラフの元になるデータをシートに書き込みます。Pythonのリスト形式でデータを用意し、appendメソッドで1行ずつ追加していくのが簡単です。

# サンプルデータを準備
access_data = [
    ['月', 'アクセス数'],
    ['1月', 12000],
    ['2月', 15000],
    ['3月', 18000],
    ['4月', 16500],
    ['5月', 19000],
    ['6月', 23000],
]

# データをシートに書き込む
for row in access_data:
    ws.append(row)

Step 4: LineChartオブジェクトを作成する

グラフの土台となるLineChartオブジェクトを生成します。この時点では、まだ中身は空っぽのグラフです。

# 折れ線グラフのオブジェクトを作成
chart = LineChart()

Step 5: グラフのデータ範囲をReferenceで指定する

Referenceを使い、グラフにしたいデータがシートのどこにあるかを指定します。

  • worksheet: 対象のシート
  • min_col, max_col: データの列番号 (A列=1, B列=2, …)
  • min_row, max_row: データの行番号
# データの範囲を指定 (B1セルからB7セルまで)
# アクセス数のデータはB列にあるので、min_colとmax_colは2
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=7)

Step 6: グラフにデータを追加する (add_data)

LineChartオブジェクトに、Step 5で指定したデータ範囲を追加します。titles_from_data=Trueとすることで、データ範囲の先頭行(B1セルの「アクセス数」)がグラフの凡例として使われます。

# グラフにデータを追加
chart.add_data(data, titles_from_data=True)

Step 7: X軸のラベルを設定する (set_categories)

グラフのX軸が何を表すか(今回は「月」)を設定します。これもReferenceでA列の範囲を指定して行います。

# X軸のラベル範囲を指定 (A2セルからA7セルまで)
# ヘッダー(A1セル)は含めない
categories = Reference(ws, min_col=1, min_row=2, max_row=7)
chart.set_categories(categories)

Step 8: ワークシートにグラフを追加する (add_chart)

最後に、完成したグラフをシート上の好きな位置に配置します。ここではD2セルをグラフの左上隅として配置します。

# シートのD2セルにグラフを配置
ws.add_chart(chart, "D2")

Step 9: Excelファイルを保存する

すべての設定が完了したら、ワークブックをファイルとして保存します。

# Excelファイルを保存
wb.save("basic_line_chart.xlsx")

完成コードの全体像

ここまでの手順を一つにまとめたものが以下のコードです。

from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference

# ワークブックとシートの準備
wb = Workbook()
ws = wb.active
ws.title = "月次アクセス数"

# データの書き込み
access_data = [
    ['月', 'アクセス数'],
    ['1月', 12000], ['2月', 15000], ['3月', 18000],
    ['4月', 16500], ['5月', 19000], ['6月', 23000],
]
for row in access_data:
    ws.append(row)

# LineChartオブジェクトの作成
chart = LineChart()

# データの範囲指定と追加
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=7)
chart.add_data(data, titles_from_data=True)

# X軸ラベルの設定
categories = Reference(ws, min_col=1, min_row=2, max_row=7)
chart.set_categories(categories)

# シートへのグラフの追加
ws.add_chart(chart, "D2")

# ファイルの保存
wb.save("basic_line_chart.xlsx")

print("グラフを作成しました: basic_line_chart.xlsx")

これを実行すると、データと折れ線グラフが描画されたExcelファイルが生成されます。


【応用編】LineChartを自由にカスタマイズする

デフォルトのグラフも良いですが、タイトルや軸ラベルを追加して、より伝わりやすいグラフにしてみましょう。カスタマイズは、add_chartでシートに追加する前に行います。

グラフにタイトルを設定する (.title)

グラフ全体のタイトルは.titleプロパティで簡単に設定できます。

chart.title = "2025年上半期 Webサイトアクセス数"

X軸・Y軸にラベル名を設定する (.x_axis.title, .y_axis.title)

X軸とY軸がそれぞれ何の数値を表しているのかを明記すると、グラフの可読性が大きく向上します。

chart.x_axis.title = "月"
chart.y_axis.title = "アクセス数 (PV)"

凡例(データ系列の名前)の位置を調整する (.legend)

凡例はデフォルトで右側に表示されますが、.legend.positionで位置を変更したり、Noneを設定して非表示にしたりできます。

# 凡例をグラフの下に表示
chart.legend.position = 'b'

# 凡例を非表示にする場合
# chart.legend = None

グラフの見た目を変更する (.style)

Excelに組み込まれているデザインテンプレートを適用できます。.styleプロパティに1から48までの数値を設定すると、グラフの色や線のスタイルが変わります。

# グラフスタイルを13番に設定
chart.style = 13

カスタマイズを反映した完成コード

上記のカスタマイズを先ほどの基本コードに組み込んでみましょう。

# ... (データ書き込みまでのコードは同じ) ...

# LineChartオブジェクトの作成
chart = LineChart()
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=7)
chart.add_data(data, titles_from_data=True)
categories = Reference(ws, min_col=1, min_row=2, max_row=7)
chart.set_categories(categories)

# --- ここからグラフのカスタマイズ ---
chart.title = "2025年上半期 Webサイトアクセス数"
chart.x_axis.title = "月"
chart.y_axis.title = "アクセス数 (PV)"
chart.style = 13
# --- ここまで ---

# シートへのグラフの追加
ws.add_chart(chart, "D2")

# ファイルの保存
wb.save("customized_line_chart.xlsx")

【応用編】複数の系列を持つ折れ線グラフを作成する

次に、例えば「PCからのアクセス」と「スマホからのアクセス」のように、複数のデータを1つのグラフで比較したい場合の作り方を解説します。

やることは非常にシンプルで、Referenceで指定するデータ範囲を複数列に広げるだけです。

サンプルコードと実行結果

from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference

wb = Workbook()
ws = wb.active
ws.title = "デバイス別アクセス数"

# 複数系列のサンプルデータ
multi_access_data = [
    ['月', 'PCアクセス', 'スマホアクセス'],
    ['1月', 8000, 4000],
    ['2月', 9000, 6000],
    ['3月', 11000, 7000],
    ['4月', 10000, 6500],
    ['5月', 11000, 8000],
    ['6月', 13000, 10000],
]
for row in multi_access_data:
    ws.append(row)

chart = LineChart()
chart.title = "デバイス別 アクセス数比較"
chart.y_axis.title = "アクセス数 (PV)"

# データ範囲をB列からC列まで(複数列)に広げる
# max_colを3(C列)に変更
data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=7)
chart.add_data(data, titles_from_data=True)

# X軸のラベルは同様
categories = Reference(ws, min_col=1, min_row=2, max_row=7)
chart.set_categories(categories)

ws.add_chart(chart, "E2")
wb.save("multi_series_line_chart.xlsx")

print("複数系列のグラフを作成しました: multi_series_line_chart.xlsx")

max_col3に変更しただけで、openpyxlがB列とC列を自動的に別々のデータ系列として認識し、2本の折れ線グラフを描画してくれます。非常に直感的で簡単です。


まとめ

この記事では、Pythonのopenpyxlライブラリを使って、Excelの折れ線グラフ作成を自動化する方法を、基本から応用まで解説しました。

  • 基本はLineChartオブジェクトにReferenceで指定したデータ範囲を追加するだけ。
  • .title.styleなどのプロパティで、グラフは思い通りにカスタマイズ可能。
  • Referenceの列範囲を広げるだけで、複数データの比較グラフも簡単に作成できる。

これまで手作業で行っていたグラフ作成を自動化することで、作業時間を短縮し、より付加価値の高い仕事に集中できるようになります。

まずはこの記事のコードを動かしてみて、ぜひあなたの業務でもopenpyxlによるグラフ作成自動化を活用してみてください。

コメント

タイトルとURLをコピーしました