
【Python】エクセルの作業を自動化する例を紹介
公開: 更新:Pythonでエクセルを自動化する基本例
Pythonのライブラリopenpyxlを使用することによって、エクセルファイルの読み書きや操作を自動化できます。このライブラリはPythonからMicrosoft Excelファイル(.xlsx)を直接操作するための豊富な機能を提供します。インストールはpipコマンドを使用して「pip install openpyxl」と実行するだけで完了します。
【サンプルコード】
import openpyxl
# 新規ワークブックの作成
wb = openpyxl.Workbook()
sheet = wb.active
sheet.title = "売上データ"
# データの入力
headers = ["商品名", "単価", "数量", "合計"]
for col, header in enumerate(headers, 1):
sheet.cell(row=1, column=col).value = header
products = [
["ノートPC", 80000, 5],
["マウス", 3000, 10],
["キーボード", 5000, 8]
]
for row, product in enumerate(products, 2):
for col, value in enumerate(product, 1):
sheet.cell(row=row, column=col).value = value
# 合計金額の計算
sheet.cell(row=row, column=4).value = product[1] * product[2]
# ファイルの保存
wb.save("sales_report.xlsx")
【実行結果】
# Excelファイル「sales_report.xlsx」が作成され、以下のようなデータが格納されます
# ------------------------------------------
# | 商品名 | 単価 | 数量 | 合計 |
# ------------------------------------------
# | ノートPC | 80000 | 5 | 400000 |
# | マウス | 3000 | 10 | 30000 |
# | キーボード | 5000 | 8 | 40000 |
# ------------------------------------------
openpyxlは単にデータの入力だけではなく、セルの書式設定や数式の適用も可能です。シートのセルにアクセスする方法としてcell(row, column)
メソッドやsheet["A1"]
のような表記も使用できます。これによりExcelの操作をプログラム内で直感的に記述できます。
上記のサンプルコードでは、ワークブックとシートの作成、ヘッダーとデータの入力、簡単な計算処理を実装しています。実際のビジネスシーンでは、このような基本操作を応用して売上レポートの自動作成や在庫管理などの業務効率化が実現できます。
【PR】『Python』を学べる企業・個人向けのプログラミングコース
既存のエクセルファイルを読み込み加工する例
既存のエクセルファイルからデータを読み込み、分析や加工を行うことはデータ処理の基本的な作業です。Pythonを使用することによって、複数のファイルからデータを抽出し、統合や集計などの処理を自動化できます。特に定期的に発生する同じフォーマットのレポート処理に効果的です。
【サンプルコード】
import openpyxl
from openpyxl.chart import BarChart, Reference
# 既存のExcelファイルを開く
wb = openpyxl.load_workbook("sales_report.xlsx")
sheet = wb.active
# データの読み込みと集計
total_sales = 0
max_row = sheet.max_row
for row in range(2, max_row + 1):
product_name = sheet.cell(row=row, column=1).value
total = sheet.cell(row=row, column=4).value
total_sales += total
print(f"{product_name}: {total}円")
# 合計行の追加
sheet.cell(row=max_row + 1, column=1).value = "合計"
sheet.cell(row=max_row + 1, column=4).value = total_sales
# グラフの作成
chart = BarChart()
chart.title = "商品別売上"
chart.y_axis.title = "売上金額"
chart.x_axis.title = "商品名"
data = Reference(sheet, min_col=4, min_row=2, max_row=max_row, max_col=4)
categories = Reference(sheet, min_col=1, min_row=2, max_row=max_row, max_col=1)
chart.add_data(data)
chart.set_categories(categories)
# グラフをシートに追加
sheet.add_chart(chart, "F2")
# 集計結果を新しいシートに保存
summary_sheet = wb.create_sheet(title="集計結果")
summary_sheet["A1"] = "総売上"
summary_sheet["B1"] = total_sales
# 変更を保存
wb.save("sales_report_analyzed.xlsx")
【実行結果】
ノートPC: 400000円
マウス: 30000円
キーボード: 40000円
# 「sales_report_analyzed.xlsx」ファイルが作成され、
# 1. 元のシートに合計行が追加
# 2. 商品別売上のグラフが追加
# 3. 「集計結果」という新しいシートに総売上が記録
既存ファイルの読み込みにはload_workbook
関数を使用します。シートの最大行数を取得するmax_row
プロパティを活用することによって、データ量に関わらず全レコードを処理できます。これはデータ量が変動する実務ファイルの処理に非常に有効です。
このサンプルコードではデータ集計に加えて、グラフ作成機能も実装しています。openpyxlのChartモジュールを使用することによって、棒グラフや折れ線グラフなどの視覚化要素を自動生成できます。データ分析結果を視覚的に表現することで、レポートの価値を高めることができます。
Pandasを活用したエクセル自動化例
PandasライブラリとExcelの組み合わせは、データ分析や処理において非常に強力なツールとなります。Pandasのデータフレームは表形式データを扱うのに最適な構造で、複雑なデータ操作や集計をシンプルなコードで実現できます。大量のデータを含むエクセルファイルの処理にも効果的です。
【サンプルコード】
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
# サンプルデータの作成(本来は既存のExcelファイルを読み込む)
data = {
'日付': [datetime(2023, 1, i) for i in range(1, 11)],
'部門A売上': [120000, 130000, 125000, 140000, 145000, 135000, 150000, 155000, 160000, 165000],
'部門B売上': [95000, 100000, 105000, 110000, 115000, 105000, 120000, 125000, 130000, 135000],
'経費': [50000, 55000, 52000, 58000, 60000, 57000, 63000, 65000, 68000, 70000]
}
# データフレームの作成
df = pd.DataFrame(data)
# データ分析
df['純利益'] = df['部門A売上'] + df['部門B売上'] - df['経費']
df['日付'] = pd.to_datetime(df['日付'])
df.set_index('日付', inplace=True)
# 週次集計
weekly_summary = df.resample('W').sum()
# 部門別売上比率の計算
df['A比率'] = df['部門A売上'] / (df['部門A売上'] + df['部門B売上']) * 100
df['B比率'] = df['部門B売上'] / (df['部門A売上'] + df['部門B売上']) * 100
# Excelファイルへの書き込み
with pd.ExcelWriter('sales_analysis.xlsx', engine='openpyxl') as writer:
df.to_excel(writer, sheet_name='日次データ')
weekly_summary.to_excel(writer, sheet_name='週次集計')
# グラフ作成と保存(日次純利益の推移)
plt.figure(figsize=(10, 6))
df['純利益'].plot(kind='line', marker='o')
plt.title('日次純利益の推移')
plt.grid(True)
plt.savefig('profit_trend.png')
# グラフシートの作成
workbook = writer.book
worksheet = workbook.create_sheet('グラフ')
worksheet.add_image(openpyxl.drawing.image.Image('profit_trend.png'), 'B2')
【実行結果】
# 「sales_analysis.xlsx」ファイルが作成され、以下のシートが含まれます:
# 1. 「日次データ」シート - 日付ごとの売上、経費、純利益、部門比率などのデータ
# 2. 「週次集計」シート - 週ごとに集計された売上、経費、純利益のデータ
# 3. 「グラフ」シート - 日次純利益の推移を示す折れ線グラフ
# また、「profit_trend.png」という画像ファイルにグラフが保存されます
Pandasのto_excel
メソッドを使用することによって、データフレームを直接Excelシートに書き込むことができます。この方法はopenpyxlと比較して、より少ないコード行数で複雑なデータ処理を実現できます。特に大量データの集計や統計分析において効率的です。
上記のサンプルコードでは、データ処理から可視化までの一連の流れを実装しています。resample
メソッドによる時系列データの集計や、条件付き書式の設定などPandasの強力な機能を活用することによって、高度なデータ分析レポートの自動生成が可能です。実務では売上予測やトレンド分析などのビジネスインテリジェンス機能を組み込むことも検討できます。
【PR】『Python』を学べる個人・中高生向けのプログラミングコース
エクセルの定型業務を自動化する実践例
エクセルを使った定型業務の多くはPythonによって自動化できます。請求書の生成、在庫管理、データクレンジングなど反復的なタスクは、スクリプトによって効率化することが可能です。特に複数のエクセルファイルを横断して処理する場合、Pythonの活用は作業時間を大幅に削減します。
【サンプルコード】
import os
import openpyxl
import pandas as pd
from datetime import datetime
# 定型業務の自動化: 複数の月次売上レポートを集約し、サマリーレポートを作成する例
def consolidate_reports():
# 対象フォルダ内の全Excelファイルをリスト化
reports_folder = "monthly_reports"
files = [f for f in os.listdir(reports_folder) if f.endswith('.xlsx')]
# 全データを格納するためのリスト
all_data = []
# 各ファイルからデータを抽出
for file in files:
# ファイル名から月を抽出(例: sales_2023_01.xlsx → 2023-01)
month_str = file.split('_')[1] + '-' + file.split('_')[2].split('.')[0]
month_date = datetime.strptime(month_str, '%Y-%m')
# Excelファイルを読み込む
df = pd.read_excel(os.path.join(reports_folder, file))
# 月情報を追加
df['月'] = month_date
# データを全体リストに追加
all_data.append(df)
# 全データを結合
consolidated_data = pd.concat(all_data, ignore_index=True)
# 月別・商品カテゴリ別の集計
summary = consolidated_data.pivot_table(
values='売上金額',
index='月',
columns='商品カテゴリ',
aggfunc='sum'
)
# 月別合計の計算
summary['合計'] = summary.sum(axis=1)
# カテゴリ別合計の計算
category_totals = summary.sum()
summary.loc['合計'] = category_totals
# 結果をExcelファイルに出力
with pd.ExcelWriter('sales_summary_report.xlsx') as writer:
# 集計データのシート
summary.to_excel(writer, sheet_name='集計')
# 詳細データのシート
consolidated_data.to_excel(writer, sheet_name='詳細データ', index=False)
# グラフ用のデータを準備
monthly_totals = summary['合計'][:-1] # '合計'行を除外
# グラフの作成(別途openpyxlを使用)
workbook = writer.book
chart_sheet = workbook.create_sheet('月別推移グラフ')
# Matplotlibでグラフを作成して画像として保存
plt.figure(figsize=(10, 6))
monthly_totals.plot(kind='bar', color='skyblue')
plt.title('月別売上推移')
plt.ylabel('売上金額')
plt.grid(axis='y')
plt.tight_layout()
plt.savefig('monthly_sales.png')
# 画像をシートに挿入
img = openpyxl.drawing.image.Image('monthly_sales.png')
chart_sheet.add_image(img, 'B2')
print(f"処理完了: {len(files)}ファイルのデータを「sales_summary_report.xlsx」に集約しました")
# 実行
consolidate_reports()
【実行結果】
処理完了: 12ファイルのデータを「sales_summary_report.xlsx」に集約しました
# 作成されるファイル「sales_summary_report.xlsx」には以下のシートが含まれます:
# 1. 「集計」シート - 月別・商品カテゴリ別の売上金額の集計表(ピボットテーブル形式)
# 2. 「詳細データ」シート - 全ての月次レポートから抽出した生データ
# 3. 「月別推移グラフ」シート - 月別売上推移を示す棒グラフ
# また「monthly_sales.png」というグラフ画像ファイルが生成されます
このサンプルコードでは、複数の月次レポートファイルから必要なデータを抽出し、統合レポートを自動生成しています。業務では月次や週次など定期的に発生するレポート作成作業が多く存在しますが、このような処理を自動化することによって、人為的ミスの削減と作業時間の短縮が実現できます。
自動化スクリプトは一度開発すれば繰り返し使用できるため、長期的な業務効率化に貢献します。またpivot_table
などPandasの強力なデータ処理機能と、openpyxlのExcel操作機能を組み合わせることによって、複雑な業務要件にも対応可能です。特に経理部門や営業部門における売上分析やコスト分析などの定型業務において大きな効果を発揮します。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
- ChatGPTでプロンプトを使うコツとNG例|シーン別のプロンプト例まで徹底解説
- ChatGPT 4oアップデートで高クオリティな画像生成が可能に!具体例や作り方、プロンプトのコツを紹介
- 【Open AI・Claude】プロンプトジェネレーターの使い方。ChatGPTで活用するコツや利用料金も併せて解説
- 【Python】@(アットマーク)の意味を簡単に解説
- 【Python】match case(match文)で複数条件を処理する方法