店舗別の売上一覧や担当者別の実績表を作るために、Excelで毎回こんな作業をしていませんか?
- 「東京店」だけをフィルターする
- 表示された行をコピーする
- 新しいファイルに貼り付ける
東京店_売上.xlsxのような名前で保存する- 次は大阪店、福岡店……と同じ作業を繰り返す
店舗が3つならまだしも、10店舗・20店舗になると、これだけでかなり時間がかかります。
この記事では、1つの売上CSVを、店舗ごとに複数のCSVへ自動分割する方法を紹介します。
Google ColabとPythonを使いますが、PythonをPCへインストールする必要はありません。
元データをアップロードしてコードを実行すれば、
東京.csv
大阪.csv
福岡.csv
のように、店舗ごとのファイルをまとめて作れます。
さらに、
東京_売上.csvのように分かりやすい名前で保存する- 分割後のCSVから「店舗」列を削除する
ところまで実際に確認します。
「Excelでフィルター → コピー → 別名保存」を店舗数分繰り返している人向けの記事です。
✅ この記事は実際に動作検証しています
Google Colabで1つのCSVを読み込み、店舗列を条件に東京・大阪・福岡のデータへ自動分割しました。groupbyを使い、条件ごとに別ファイルを作成できることを確認しています。
検証結果: CSV自動分割:成功 / 東京・大阪・福岡の3グループに分割 / groupby処理を確認 / 分割後ファイルを作成
この記事はこんな人向け
- 店舗別の売上データを毎月分けている
- 担当者ごとに一覧を作って配布している
- Excelのフィルターとコピペ作業を繰り返している
- 1つのCSVを複数ファイルにまとめて分割したい
- Pythonを使ってみたいが、PCへのインストールはしたくない
この記事でできるようになること
今回の方法では、1つのCSVに入っているデータを「店舗」列の値ごとに分けます。
例えば、
東京
大阪
福岡
という3店舗が入っていれば、
東京.csv
大阪.csv
福岡.csv
の3ファイルを自動生成します。
さらに、ファイル名を
東京_売上.csv
大阪_売上.csv
福岡_売上.csv
のように変更したり、分割後のファイルから不要な「店舗」列を削除したりする方法も試します。
今回使う売上データ
今回は、次のような店舗別売上一覧を使います。
| 店舗 | 商品コード | 商品名 | 売上 |
|---|---|---|---|
| 東京 | A001 | 商品A | 10000 |
| 大阪 | A001 | 商品A | 12000 |
| 福岡 | A002 | 商品B | 7000 |
| 東京 | A002 | 商品B | 8000 |
| 大阪 | A003 | 商品C | 9000 |
| 福岡 | A004 | 商品D | 11000 |
東京・大阪・福岡の売上データが、1つのCSVにまとまっています。
今回はこのファイルを、
all_sales.csv
という名前で保存しています。

Google ColabでCSVを開く
Google Colabで新しいノートブックを作成します。
今回は、
TaskLess Lab_CSV自動分割テスト
という名前にしました。
左側のフォルダアイコンを開き、all_sales.csv をアップロードします。
次に、最初のコードセルへ以下を貼り付けます。
import pandas as pd
df = pd.read_csv("all_sales.csv")
display(df)
実行すると、6行のデータが表示されます。
ここではまだファイル分割はしていません。
まず、
- 東京が2件
- 大阪が2件
- 福岡が2件
と正しく読み込まれていることを確認します。
店舗ごとにCSVを自動分割する
次に、店舗ごとに別のCSVへ分割します。
新しいコードセルで、次を実行します。
for store, group in df.groupby("店舗"):
filename = f"{store}.csv"
group.to_csv(
filename,
index=False,
encoding="utf-8-sig"
)
print(f"{filename} を作成しました")
実行すると、
大阪.csv
東京.csv
福岡.csv
の3ファイルが自動で作られます。

大阪.csvを開くと、
| 店舗 | 商品コード | 商品名 | 売上 |
|---|---|---|---|
| 大阪 | A001 | 商品A | 12000 |
| 大阪 | A003 | 商品C | 9000 |
のように、大阪のデータだけが入っています。
groupby("店舗") は何をしている?
今回の中心になるのが、次の部分です。
df.groupby("店舗")
これは、
「店舗」列の値ごとにデータをグループ分けする
という意味です。
今回なら、
- 東京
- 大阪
- 福岡
の3グループに分けています。
そのグループごとに、
group.to_csv(...)
を実行しているため、3つのCSVが自動で作られます。
自分のCSVでは、ここを変える
今回は店舗別に分けているため、
df.groupby("店舗")
としています。
担当者別に分けたいなら、
df.groupby("担当者")
商品カテゴリ別なら、
df.groupby("カテゴリ")
支店別なら、
df.groupby("支店")
に変更できます。
つまり、どの列の値ごとにファイルを分けたいかを groupby() に指定します。
ファイル名を「東京_売上.csv」のようにする
最初のコードでは、
東京.csv
大阪.csv
福岡.csv
というファイル名になりました。
これでも問題ありませんが、実際にファイルを受け取る人からすると、
このCSVは何のデータなのか
が分かりにくい場合があります。
そこで、ファイル名に _売上 を付けてみます。
for store, group in df.groupby("店舗"):
filename = f"{store}_売上.csv"
group.to_csv(
filename,
index=False,
encoding="utf-8-sig"
)
print(f"{filename} を作成しました")
これで、
大阪_売上.csv
東京_売上.csv
福岡_売上.csv
のような名前になります。

ファイル名だけで内容が分かるので、メール添付や共有フォルダで配布するときにも扱いやすくなります。
分割後のCSVから「店舗」列を削除する
店舗別にファイルを分けたあと、
大阪_売上.csv
というファイル名になっていれば、中の「店舗」列は不要なこともあります。
例えば、大阪のファイルなら、
| 店舗 | 商品コード | 商品名 | 売上 |
|---|---|---|---|
| 大阪 | A001 | 商品A | 12000 |
| 大阪 | A003 | 商品C | 9000 |
となっています。
すべて大阪なので、「店舗」列を残しても同じ値が並ぶだけです。
そこで、店舗列を削除して保存してみます。
for store, group in df.groupby("店舗"):
filename = f"{store}_売上_店舗列なし.csv"
output_df = group.drop(columns=["店舗"])
output_df.to_csv(
filename,
index=False,
encoding="utf-8-sig"
)
print(f"{filename} を作成しました")
実行すると、
大阪_売上_店舗列なし.csv
東京_売上_店舗列なし.csv
福岡_売上_店舗列なし.csv
が作られます。

大阪のファイルを開くと、
| 商品コード | 商品名 | 売上 |
|---|---|---|
| A001 | 商品A | 12000 |
| A003 | 商品C | 9000 |
となり、「店舗」列が消えています。

drop(columns=["店舗"]) は何をしている?
店舗列を削除しているのが、次の部分です。
output_df = group.drop(columns=["店舗"])
これは、
「店舗」という列を削除した表を作る
という処理です。
例えば担当者別にファイルを分けていて、分割後は「担当者」列が不要なら、
output_df = group.drop(columns=["担当者"])
に変更できます。
「店舗列を残す」「消す」はどちらがいい?
これは用途によります。
例えば、東京店の担当者に 東京_売上.csv を渡すだけなら、「店舗」列がなくても問題ないかもしれません。
一方で、あとから複数CSVを再度まとめる可能性があるなら、「店舗」列を残しておいた方が分かりやすいです。
- 配布用として使うだけなら削除
- あとで再集計・再結合するなら残す
のように使い分けられます。
自分のファイルで変更する場所
今回のコードを自分のCSVに置き換えるときに確認するのは、主に次の部分です。
| 今回の設定 | 自分のファイルでは |
|---|---|
all_sales.csv | 実際のCSVファイル名 |
"店舗" | 分割したい列名 |
f"{store}_売上.csv" | 作りたいファイル名 |
drop(columns=["店舗"]) | 削除したい列 |
担当者別に分割する例
店舗別だけでなく、担当者別にも同じ方法が使えます。
例えば、1つの受注一覧に、
田中
佐藤
鈴木
という担当者が入っているとします。
その場合は、
for person, group in df.groupby("担当者"):
filename = f"{person}_受注.csv"
group.to_csv(
filename,
index=False,
encoding="utf-8-sig"
)
とすれば、
田中_受注.csv
佐藤_受注.csv
鈴木_受注.csv
のように自動分割できます。
どんな仕事で使える?
今回の方法は、店舗別売上だけではありません。
- 営業担当者ごとに案件一覧を分ける
- 支店ごとに顧客一覧を分ける
- 商品カテゴリごとに商品マスターを分ける
- 配送会社ごとに出荷一覧を分ける
- 部署ごとに申請一覧を分ける
特に、
Excelでフィルターして、表示された行を別ファイルへコピーする
作業を何度も繰り返しているなら、置き換えやすい処理です。
ファイルを分割する必要はなく、特定の店舗や売上条件に合う行だけを取り出したい場合は条件抽出の方が向いています。

前回の「CSV一括結合」と逆の処理
以前紹介した「複数CSVを1つに結合する方法」と、今回の記事はちょうど逆の処理です。
複数の店舗CSVを1つにまとめたい場合は、
複数CSV
↓
1つのCSV
今回の方法は、
1つのCSV
↓
店舗別の複数CSV
です。
実際の仕事では、
店舗からCSVを集める
↓
1つにまとめる
↓
集計・加工する
↓
必要に応じて店舗別に再分割する
という流れもあります。
両方できるようになると、店舗別・担当者別のCSV整理をかなり自動化しやすくなります。
複数に分かれたCSVを1つに戻したい場合はこちらです。

Excelファイル(.xlsx)でもできる?
今回使っているのはCSVです。
ただし、PythonのpandasではExcelファイルも読み込めます。
CSVの、
pd.read_csv("all_sales.csv")
を、
pd.read_excel("all_sales.xlsx")
のように変更すれば、Excelファイルを読み込むこともできます。
ただしExcelには、
- 複数シート
- セル結合
- 数式
- 書式
- 非表示行
など、CSVにはない要素があります。
そのため、この記事ではまず構造がシンプルなCSVで動作確認しています。
日本語ファイル名でも問題なく作れた
今回の検証では、
大阪_売上.csv
東京_売上.csv
福岡_売上.csv
のような日本語を含むファイル名も問題なく生成できました。
CSV保存時には、
encoding="utf-8-sig"
を指定しています。
これは、日本語を含むCSVをExcelで開いたときに文字化けしにくくするためです。
まとめ
今回は、1つの売上CSVを店舗ごとのCSVへ自動分割しました。
実際に確認したのは、
all_sales.csvを読み込む- 「店舗」列を基準に東京・大阪・福岡へ分割
東京.csvなどを自動生成東京_売上.csvのように分かりやすいファイル名に変更- 分割後のCSVから「店舗」列を削除
- 日本語ファイル名でも正常に保存
Excelで、
フィルター
↓
コピー
↓
新規ファイルへ貼り付け
↓
名前を付けて保存
↓
次の店舗で同じ作業
を繰り返しているなら、この処理でまとめて自動化できます。
店舗が3つでも10店舗でも、基本的に実行するコードは同じです。
店舗別・担当者別・支店別など、「1つの一覧を人や拠点ごとに分ける作業」を繰り返しているなら、かなり相性のいい自動化です。


