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

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


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

ブログに戻る

コメントを残す

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

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - 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やプログラムなどの
最新情報を検索する