Pythonで始める業務効率化

,

年度別に分かれているExcelの複数のシート(ブック)を一括集計する

 業務のなかで「Excelの年度別データを毎年集計してグラフ化する」という作業は、多くの企業で行われているのではないでしょうか? しかし、年度のデータが少なければ大きな負荷にはなりませんが、何千、何万となってくるとExcelではかなりつらくなってくるのではないでしょうか。また長い年月が経っていると、顧客、担当、商品などのキーが、入力された担当者の違いによって統一されていない場合とかがあって、切り口を変えて集計しようとするとうまくいかないなどの問題があります。こういう、揺らぎの修正とかに時間がとられているのが現実ではないでしょうか。

 こういう揺らぎを防ぐためには、入力する前に顧客マスター、商品マスター、担当マスターなどの分割されたシートを参照にプルダウンメニューで入力補助をしていく方法があります。しかしながら、古いデータはもう後の祭りとなっている場合もあります。

 揺らぎの修正は、先に紹介したTableauなどのBIツールを使ってクリーニングするやり方はありますが、Pythonであらかじめ揺らぎを解析して置換するという手もあります。

 今回は10年分の売り上げを、カテゴリ別、顧客別に重ね合わせ棒グラフで集計してグラフ化してみました。もとデータのExcelシートはサムネールの画像のものです。年のデータがシートごとに分かれているとコピー、ペーストで一つのシートにまとめたりして分析することもありますが、データ数が大きくなると動作も遅くなって大変ですよね。こういうときにPythonのpandasをつかって読み込むことで一気に処理することが可能となります。

売り上げ集計のサンプルスクリプト(あくまでサンプルですので、流用したことによる損害その他責任は負いかねます。)

import pandas as pd
import matplotlib.pyplot as plt
# ------------------------------------------------
# Excelの複数シートを読み込み、年度別売上を集計
# ------------------------------------------------
file_path = "sales_2016_2026.xlsx"
# Excelファイルのシート一覧を取得
xls = pd.ExcelFile(file_path)
sheet_names = xls.sheet_names # ["2016年度", "2017年度", …]
all_data = []
for sheet in sheet_names:
df = pd.read_excel(file_path, sheet_name=sheet)
df["日付"] = pd.to_datetime(df["日付"])

# 年度列を追加(シート名から年度を抽出)
year = int(sheet.replace("年度", ""))
df["年度"] = year
all_data.append(df)
# 全年度を結合
df_all = pd.concat(all_data, ignore_index=True)
# 年度別売上集計
df_year = df_all.groupby("年度")["売上金額"].sum().reset_index()
# ----------------
# グラフ化
# ----------------
plt.figure(figsize=(8, 4))
plt.rcParams['font.family'] = 'MS Gothic' # 日本語フォント
plt.rcParams['font.size'] = 12 # フォントサイズ
plt.bar(df_year["年度"], df_year["売上金額"], color="steelblue")
plt.xlabel("年度")
plt.ylabel("売上金額")
plt.title("年度別売上推移(2016-2026)")
plt.xticks(df_year["年度"])
plt.show()

カテゴリー別に集計する

これには、groupbyの変数を[“年度”, “カテゴリ”]にすると集計されます。

df_cat = df_all.groupby(["年度", "カテゴリ"])["売上金額"].sum().unstack(fill_value=0)

df_catの中身は下記のようになります。

顧客別に集計する

これにはgroupbyの変数を[“年度”, “顧客名”]にすると集計されます。

df_cus = df_all.groupby(["年度", "顧客名"])["売上金額"].sum().unstack(fill_value=0)

いかがでしたでしょうか? これだけの短いコードで集計ができてしまいます。エクエルだと色使いも大変だしmatplotlibはバラエティーに富んでいるので助かります。それでも満足いかないひとはseabornというライブラリを使うともっときれいです。

Pythonで業務効率化するメリット

■Excelの手作業を自動化できる

年度集計のような定型作業は、Python化することで

  • 作業時間の削減
  • ミスの防止
  • 担当者が変わっても同じ品質が維持できる

■複数シート(ブック)の一括処理はPythonの得意分野

短いコードで集計は楽々

■グラフ作成まで自動化できる

報告資料の作成を自動化できるため、業務効率化のインパクトが非常に大きいです。今まで一日かけて集計していたのをコマンド一発で数秒で処理できます。

以上、Excelで毎年繰り返している作業をPythonに置き換えることで、業務効率化・ミス削減・再現性向上が実現できます。もちろん月ベースでも同じことができますので月報の作成もあっという間に終えることができます。

注)コードの生成にはMicrosoft Copilotの助けを借りています。


トップへ戻る