Excel売上集計は「バラバラな売上データを一瞬でまとめて、分析・レポートに使える形にする」ための最強スキル
あなたがやりたいことは、まさに「現場の数字を意思決定に使える形に変える」ことです。 その入口が 売上集計の自動化 です。
Python+Excelを組み合わせると、 日次・月次・商品別・店舗別・担当者別の売上を、 人が手で集計する前に、すでに「まとまった状態」で用意できます。
ここでは、初心者でもそのまま真似できる形で、 売上集計の基本〜応用までをテンプレート形式で解説します。
売上集計の基本テンプレート(まずはこれを押さえる)
売上データの前提(よくある列構成)
次のようなExcelを想定します。
- 日付
- 商品
- 数量
- 単価
- 売上
売上列がない場合は、Python側で 数量 × 単価 から計算してもOKです。
Excelを読み込んで売上を計算する基本コード
import pandas as pd
df = pd.read_excel("sales.xlsx")
df["売上"] = df["数量"] * df["単価"]
df.to_excel("sales_with_amount.xlsx", index=False)
Pythonここでやっていることはシンプルですが、 「売上列を毎回Excelで計算している」現場なら、これだけでかなり楽になります。
商品別売上集計(最もよく使う軸)
商品別に売上を集計するコード
import pandas as pd
df = pd.read_excel("sales.xlsx")
df["売上"] = df["数量"] * df["単価"]
summary_product = df.groupby("商品")["売上"].sum()
summary_product.to_excel("summary_product.xlsx")
Pythonここを深掘りする:groupby の意味
groupby("商品") は 「同じ商品名の行をひとまとめにして、そのグループごとに計算する」 という意味です。
そのあとに ["売上"].sum() と書くことで、 「商品ごとに売上を合計する」処理になります。
この形を覚えると、 商品別、店舗別、担当者別、エリア別など、 ほぼすべての「○○別集計」が同じパターンで書けるようになります。
月別売上集計(経営レポート・KPIで必須の軸)
日付から「月」を取り出して集計するコード
import pandas as pd
df = pd.read_excel("sales.xlsx")
df["日付"] = pd.to_datetime(df["日付"])
df["月"] = df["日付"].dt.to_period("M")
df["売上"] = df["数量"] * df["単価"]
summary_month = df.groupby("月")["売上"].sum()
summary_month.to_excel("summary_month.xlsx")
Pythonここを深掘りする:dt.to_period(“M”) の意味
df["日付"].dt.to_period("M") は 「2026-06-01」「2026-06-15」などの日付を 「2026-06」という“月単位の期間”に変換しています。
これを使うと、 日付がバラバラでも「同じ月のデータ」をひとまとめにできるので、 月次売上集計が非常に簡単になります。
商品×月の二軸売上集計(ピボットテーブル的な集計)
商品×月で売上を集計するコード
import pandas as pd
df = pd.read_excel("sales.xlsx")
df["日付"] = pd.to_datetime(df["日付"])
df["月"] = df["日付"].dt.to_period("M")
df["売上"] = df["数量"] * df["単価"]
pivot = pd.pivot_table(
df,
index="商品",
columns="月",
values="売上",
aggfunc="sum",
fill_value=0
)
pivot.to_excel("summary_product_month.xlsx")
Pythonここを深掘りする:pivot_table のイメージ
pivot_table は、Excelのピボットテーブルとほぼ同じイメージです。
- 行方向(index)に「商品」
- 列方向(columns)に「月」
- 中身(values)に「売上」
という形で、 「商品×月」の売上表を一発で作ってくれます。
この形は、 「どの商品がどの月に強いか」 「季節性があるか」 などを分析するときに非常に強力です。
店舗別・担当者別売上集計(現場でよく求められる軸)
店舗別売上集計のコード
summary_store = df.groupby("店舗")["売上"].sum()
summary_store.to_excel("summary_store.xlsx")
Python担当者別売上集計のコード
summary_staff = df.groupby("担当者")["売上"].sum()
summary_staff.to_excel("summary_staff.xlsx")
Pythonここでも使っているのは、 「groupby して sum する」という、 さっきの基本パターンとまったく同じです。
軸だけ変えれば、 どんな切り口でも売上集計ができるようになります。
集計結果を「見やすいExcel」に整形する
集計結果を複数シートにまとめて出力するコード
with pd.ExcelWriter("sales_report.xlsx") as writer:
summary_product.to_excel(writer, sheet_name="商品別売上")
summary_month.to_excel(writer, sheet_name="月別売上")
summary_store.to_excel(writer, sheet_name="店舗別売上")
Pythonこのようにすると、 1つのExcelファイルの中に
- 商品別売上
- 月別売上
- 店舗別売上
がそれぞれ別シートとしてまとまります。
レポートとして提出するときや、 社内共有用の「売上レポートブック」を作るときに非常に便利です。
集計+グラフまで自動化する(レポートとして完成させる)
月別売上の折れ線グラフを自動生成する例
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
summary_month.to_excel("summary_month.xlsx")
wb = load_workbook("summary_month.xlsx")
ws = wb.active
chart = LineChart()
chart.title = "月別売上推移"
values = Reference(ws, min_col=2, min_row=2, max_row=1 + len(summary_month))
labels = Reference(ws, min_col=1, min_row=2, max_row=1 + len(summary_month))
chart.add_data(values, titles_from_data=False)
chart.set_categories(labels)
ws.add_chart(chart, "E2")
wb.save("summary_month_chart.xlsx")
Pythonここまで来ると、 「集計された数字」だけでなく、 「視覚的に売上の流れが分かるレポート」まで自動で作れるようになります。
売上集計を設計するときに、絶対に意識してほしいポイント
軸を先に決める
「何別で見たいのか」を先に決めると、 コードは自然とシンプルになります。
商品別、月別、店舗別、担当者別、 そしてその組み合わせ(商品×月、店舗×月など)。
列名と型をきれいにしてから集計する
集計の前に
- 列名を統一する
- 日付を
datetimeにする - 数量・単価・売上を数値型にする
この「前処理」をしておくと、 集計処理はほぼエラーなく、きれいに動きます。
