【Python】エクセルの作業を自動化する例を紹介

【Python】エクセルの作業を自動化する例を紹介

公開: 更新:



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行目 スクリプトを実行して結果を表示
おすすめのPython研修一覧

Python研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Python研修の一覧を見る

おすすめのDX研修一覧

DX研修を提供しているおすすめの企業・法人を一覧で掲載しております。

DX研修の一覧を見る

おすすめのJava研修一覧

Java研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Java研修の一覧を見る

おすすめのJavaScript研修一覧

JavaScript研修を提供しているおすすめの企業・法人を一覧で掲載しております。

JavaScript研修の一覧を見る

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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する