Pythonでエクセルを自動化するために必要なこと
Pythonのライブラリopenpyxlを使用することによって、エクセルファイルの読み書きや操作を自動化できます。openpyxlはPythonから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の操作を直感的に記述することも可能です。
上記のサンプルコードはワークブックの作成からヘッダーの設定、データ入力、合計の計算を実装したものです。業務の現場では、これを応用して売上レポートの自動作成や在庫管理などの効率化を図れます。
行番号 | 詳細説明 |
---|---|
1行目 | openpyxlのインポート |
3行目 | 新規ワークブックwbの作成 |
4行目 | アクティブシートを取得してsheetに代入 |
5行目 | シート名を売上データに変更 |
7行目 | ヘッダー行として商品名や単価などを設定 |
9〜13行目 | 商品ごとのデータをリストにまとめる |
15〜20行目 | 商品リストをループで処理しセルに値を入力し合計を計算 |
23行目 | Excelファイルsales_report.xlsxを保存 |
「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
を使用します。sheet.max_row
によってシートの最終行まで自動で処理できるため、データ量が増えても同じコードを使い回せます。グラフを追加するBarChartモジュールを組み合わせると、視覚的にもわかりやすいレポートを作成することが可能です。
行番号 | 詳細説明 |
---|---|
1行目 | openpyxlやBarChartなど必要なモジュールをインポート |
4行目 | 既存のExcelファイルsales_report.xlsxを読み込む |
8〜13行目 | シートをループして商品名と合計額を取得し累計を計算 |
16〜17行目 | 合計行をシートの末尾に追加 |
19〜30行目 | 棒グラフを作成してシートに追加 |
33〜36行目 | 新しいシートを作成して合計値を記録し変更を保存 |
Pythonでエクセルの定型業務を自動化する例
エクセルを使った定型業務は、Pythonのスクリプトによって大幅に効率化できます。請求書の作成や在庫管理、データクレンジングなどのタスクを自動化すると、人的ミスの削減や作業時間の短縮につながります。
【サンプルコード】
import os
import openpyxl
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
# 定型業務の自動化: 複数の月次売上レポートを集約し、サマリーレポートを作成する例
def consolidate_reports():
reports_folder = "monthly_reports"
files = [f for f in os.listdir(reports_folder) if f.endswith('.xlsx')]
all_data = []
for file in files:
month_str = file.split('_')[1] + '-' + file.split('_')[2].split('.')[0]
month_date = datetime.strptime(month_str, '%Y-%m')
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
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]
workbook = writer.book
chart_sheet = workbook.create_sheet('月別推移グラフ')
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というグラフ画像ファイルも生成されます
上記のサンプルコードでは、複数ファイルからのデータ抽出とピボットテーブルによる集計を組み合わせて自動化しています。月次や週次で同じ処理を行う業務は、このようなスクリプトを活用すると安定した品質で迅速に結果を得られます。
行番号 | 詳細説明 |
---|---|
1〜5行目 | 必要な標準ライブラリやopenpyxlなどをインポート |
9〜10行目 | 対象フォルダ内の.xlsxファイルをリスト化 |
12〜18行目 | ファイル名から月情報を取得しデータフレームに月を付与して結合用リストに格納 |
20〜26行目 | 全データを結合し商品カテゴリごとの合計や総合計をピボットテーブルで集計 |
28〜47行目 | ExcelWriterを使って集計結果と詳細データを出力し月別売上の棒グラフを作成 |
49行目 | スクリプトを実行して結果を表示 |
Pandasとエクセルを組み合わせて自動化する例
PandasのDataFrameとエクセルを組み合わせると、より複雑なデータ処理や集計を自動化できます。時系列データの集計や統計分析を短いコードで記述し、Excelファイルへ直接出力できるため大量のデータを扱うケースでも便利です。
【サンプルコード】
import openpyxl
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」の画像ファイルも生成されます
to_excel
メソッドによって、DataFrameの内容を直接エクセルlへ書き込めます。集計や分析をプログラム内で実行し、結果を出力する一連の流れを自動化できるため、日次や週次レポート作成の手間を減らせます。時系列データを扱うresample
メソッドや各種統計関数を組み合わせると、より高度な分析にも対応可能です。
行番号 | 詳細説明 |
---|---|
1〜4行目 | openpyxlやpandasなどをインポート |
6〜14行目 | サンプルデータを辞書型で定義しDataFrameに変換 |
16〜19行目 | 部門ごとの売上と経費を用いて純利益を計算し日付をインデックスに設定 |
21行目 | 週単位でデータを合計する週次集計を実行 |
23〜24行目 | 部門ごとの売上比率を計算 |
26〜36行目 | Excelファイルに書き込みグラフを作成し画像として保存後シートに画像を挿入 |
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
- 【Python】アプリ開発の練習方法|初心者向け
- 【Python】ファイルがあるのに「no such file or directory」エラーになる原因
- Pythonで何ができる?趣味にも活用する方法などを解説
- 【Excel】半角を全角、全角を半角に変換する方法