商品別の売上一覧を確認するとき、
- 売上から原価を引いて粗利を計算する
- 粗利を売上で割って粗利率を出す
- 数式を下の行までコピーする
- 粗利率が低い商品だけフィルターする
といった作業をExcelで毎回やっていませんか?
商品数が少なければそれほど大変ではありませんが、数百商品ある一覧を毎週・毎月更新するとなると、数式の入力やコピー、フィルター設定を繰り返すことになります。
この記事では、Google ColabとPythonを使って、売上と原価から粗利・粗利率を自動計算する方法を紹介します。
今回は実際に、
- 売上-原価から粗利を計算
- 粗利率を自動計算
- 粗利率を小数1桁に整える
- 粗利率5%未満の商品を抽出
- 粗利1,000円未満の商品を抽出
- 粗利率10%未満の商品を抽出
- 抽出結果をCSVとして保存
まで動作確認しました。
PythonをPCにインストールする必要はありません。
「Excelで粗利や粗利率の数式を毎回入れて、低利益の商品をフィルターしている」人向けの記事です。
✅ この記事は実際に動作検証しています
売上と原価を含むテストデータをGoogle Colabで処理し、粗利・粗利率を自動計算しました。さらに、粗利率や粗利額を条件に低利益の商品を抽出できることも確認しています。
検証結果: 粗利・粗利率計算:成功 / 粗利率5%未満・10%未満を抽出 / 粗利1,000円未満を抽出
- この記事はこんな人向け
- この記事でできるようになること
- 今回使う商品データ
- Google ColabでCSVを読み込む
- 粗利を自動計算する
- 粗利率も自動計算する
- 粗利率5%未満の商品だけ抽出する
- 粗利1,000円未満の商品を抽出する
- 粗利率10%未満の商品を抽出する
- 自分の基準に合わせるにはどこを変える?
- 粗利率と粗利額、どちらを見るべき?
- 粗利率10%未満の商品をCSVとして保存する
- low_margin_products.csv の名前は変更できる
- なぜ utf-8-sig を指定する?
- 自分の商品一覧で使うときに変更する場所
- どんな仕事で使える?
- 前回の「条件抽出」と組み合わせると使いやすい
- Excelでもできるのに、Pythonを使う意味は?
- まとめ
この記事はこんな人向け
- 商品別の粗利をExcelで計算している
- 粗利率の数式を毎月コピーしている
- 利益率の低い商品をフィルターで探している
- ECの商品一覧や販売実績を確認している
- 売上と原価のCSVから採算の悪い商品を見つけたい
- 定型的なExcel作業をPythonで減らしたい
この記事でできるようになること
今回の方法では、元データにある「売上」と「原価」から、新しく、
- 粗利
- 粗利率
の2列を自動で追加します。
計算式はシンプルです。
粗利 = 売上 − 原価
粗利率 = 粗利 ÷ 売上 × 100
例えば、売上10,000円、原価7,000円なら、
粗利:3,000円
粗利率:30.0%
となります。
さらに計算後の一覧から、
粗利率5%未満
粗利1,000円未満
粗利率10%未満
といった条件で、利益の低い商品だけを抜き出せるようにします。
今回使う商品データ
今回は、次のような商品別の売上・原価一覧を使います。
| 商品コード | 商品名 | 売上 | 原価 |
|---|---|---|---|
| A001 | 商品A | 10000 | 7000 |
| A002 | 商品B | 8000 | 7400 |
| A003 | 商品C | 12000 | 9000 |
| A004 | 商品D | 7000 | 6800 |
| A005 | 商品E | 15000 | 12000 |
| A006 | 商品F | 20000 | 18400 |
このCSVを profit_test.csv としてGoogle Colabにアップロードします。

Google ColabでCSVを読み込む
Google Colabで新しいノートブックを作成します。
今回は、
TaskLess Lab_粗利・粗利率計算テスト
という名前にしました。
CSVをアップロードしたら、最初のコードセルで次を実行します。
import pandas as pd
df = pd.read_csv("profit_test.csv")
display(df)
実行すると、商品コード・商品名・売上・原価の6件が表示されます。
この時点ではまだ粗利・粗利率の列はありません。
まず、元データが正しく読み込まれていることを確認します。
粗利を自動計算する
まず、売上から原価を引いて粗利を計算します。
使うコードはこれです。
df["粗利"] = df["売上"] - df["原価"]
この処理では、
売上 − 原価
の結果を、新しい「粗利」列として追加しています。
例えばA001なら、
10,000円 − 7,000円 = 3,000円
です。
Excelなら、
=C2-D2
のような数式を入力して下までコピーする処理に近いです。
Pythonでは1行書けば、すべての商品に対してまとめて計算できます。
粗利率も自動計算する
続いて、粗利率を計算します。
df["粗利率"] = (
df["粗利"] / df["売上"] * 100
).round(1)
粗利率は、
粗利 ÷ 売上 × 100
で計算しています。
最後の、
.round(1)
は、小数第1位まで表示するための指定です。
今回のデータでは、次のようになりました。
| 商品コード | 売上 | 原価 | 粗利 | 粗利率 |
|---|---|---|---|---|
| A001 | 10000 | 7000 | 3000 | 30.0 |
| A002 | 8000 | 7400 | 600 | 7.5 |
| A003 | 12000 | 9000 | 3000 | 25.0 |
| A004 | 7000 | 6800 | 200 | 2.9 |
| A005 | 15000 | 12000 | 3000 | 20.0 |
| A006 | 20000 | 18400 | 1600 | 8.0 |

これで、売上と原価しかなかった商品一覧に、粗利と粗利率の列を自動で追加できました。
粗利率5%未満の商品だけ抽出する
計算しただけでは、商品数が多いと確認が大変です。
そこで次は、粗利率が低い商品だけに絞ります。
まずは、
粗利率5%未満
の商品です。
low_margin_df = df[df["粗利率"] < 5]
display(low_margin_df)
今回のデータでは、A004だけが対象になりました。
A004 / 商品D / 売上7,000円 / 原価6,800円
粗利200円 / 粗利率2.9%

このように、利益率がかなり低い商品だけを一覧からすぐに見つけられます。
粗利1,000円未満の商品を抽出する
利益率ではなく、利益額そのものを基準にすることもできます。
今回は、
粗利1,000円未満
で絞ります。
low_profit_df = df[df["粗利"] < 1000]
display(low_profit_df)
今回の対象は、
- A002:粗利600円
- A004:粗利200円
の2商品です。

ここで分かるのは、粗利率と粗利額は別の基準だということです。
例えばA002は粗利率7.5%なので「粗利率5%未満」には入りません。
一方で粗利額は600円なので、「粗利1,000円未満」には入ります。
つまり、
- 利益率が低い商品を探したいのか
- 利益額が小さい商品を探したいのか
によって、見る条件を変える必要があります。
粗利率10%未満の商品を抽出する
次は条件を少し広げて、
粗利率10%未満
の商品を抽出します。
low_margin_10_df = df[df["粗利率"] < 10]
display(low_margin_10_df)
今回の結果は、
- A002:7.5%
- A004:2.9%
- A006:8.0%
の3商品です。

粗利率5%未満では1商品だけでしたが、10%未満にすると3商品まで対象が増えました。
このように、自社で確認したい利益率の基準に合わせて数値を変更できます。
例えば15%未満なら、
df[df["粗利率"] < 15]
20%未満なら、
df[df["粗利率"] < 20]
です。
自分の基準に合わせるにはどこを変える?
今回使った、
df["粗利率"] < 10
の 10 を変えるだけで、抽出基準を変更できます。
例えば、
df["粗利率"] < 5
なら粗利率5%未満。
df["粗利率"] < 15
なら粗利率15%未満です。
粗利額なら、
df["粗利"] < 1000
の 1000 を変更します。
例えば粗利3,000円未満なら、
df["粗利"] < 3000
です。
粗利率と粗利額、どちらを見るべき?
両方見るのが分かりやすいです。
例えば、
商品A:粗利3,000円 / 粗利率30%
商品F:粗利1,600円 / 粗利率8%
なら、商品Fは粗利額だけを見ると1,600円ありますが、売上に対する利益率は8%しかありません。
逆に、販売単価が低い商品では粗利額が小さくても、粗利率は高いことがあります。
そのため、
- 利益率が低すぎる商品を探す → 粗利率
- 1件売ってもほとんど利益が残らない商品を探す → 粗利額
のように確認すると分かりやすいです。
粗利率10%未満の商品をCSVとして保存する
最後に、抽出した商品だけを別CSVとして保存します。
今回は粗利率10%未満の3商品を保存しました。
low_margin_10_df.to_csv(
"low_margin_products.csv",
index=False,
encoding="utf-8-sig"
)
print("low_margin_products.csv を作成しました")
実行すると、Google Colabの左側に、
low_margin_products.csv
が生成されます。

このCSVをダウンロードすれば、Excelで開いたり、ほかの担当者へ共有したりできます。
low_margin_products.csv の名前は変更できる
ファイル名は自由に変更できます。
例えば、
粗利率10%未満.csv
や、
低粗利商品一覧.csv
のような名前でも保存できます。
毎月確認するなら、
2026年9月_低粗利商品一覧.csv
のように年月を入れておくと、あとから見ても分かりやすくなります。
なぜ utf-8-sig を指定する?
保存コードでは、
encoding="utf-8-sig"
を指定しています。
これは、日本語の商品名や列名を含むCSVをExcelで開いたときに、文字化けしにくくするためです。
商品コードだけでなく、
- 商品名
- 店舗名
- 担当者名
- カテゴリ名
など日本語が入っているデータでは、指定しておくと扱いやすくなります。
自分の商品一覧で使うときに変更する場所
今回のコードを自分の商品一覧で使う場合、主に確認するのは次の部分です。
| 今回の設定 | 自分のデータでは |
|---|---|
profit_test.csv | 実際のCSVファイル名 |
"売上" | 売上金額が入っている列名 |
"原価" | 原価が入っている列名 |
< 5 | 粗利率の基準 |
< 1000 | 粗利額の基準 |
low_margin_products.csv | 保存するファイル名 |
例えば列名が「販売価格」と「仕入価格」なら、
df["粗利"] = df["販売価格"] - df["仕入価格"]
のように変更します。
どんな仕事で使える?
今回の方法は、ECの商品一覧だけではありません。
- 商品マスターの採算チェック
- 通販商品の利益確認
- 店舗別商品の粗利確認
- 仕入価格変更後の利益チェック
- 販売価格の見直し候補抽出
- 粗利率の低いSKUの洗い出し
特に、
Excelで粗利計算の数式を下までコピーし、そのあとフィルターで低利益商品を探している
という作業なら、そのまま置き換えやすいです。

前回の「条件抽出」と組み合わせると使いやすい
前回の記事では、CSVから、
- 売上10,000円以上
- 東京店だけ
- 東京店かつ売上10,000円以上
など、条件に合う行を抽出しました。
今回も考え方は同じです。
違うのは、先に、
売上・原価
↓
粗利・粗利率を計算
↓
計算した結果を条件抽出
しているところです。
つまり、元のCSVに存在しない数値をPythonで計算してから、その計算結果を使って商品を絞り込めます。
Excelでもできるのに、Pythonを使う意味は?
粗利と粗利率の計算だけなら、もちろんExcelでもできます。
例えば数十行の商品一覧を一度だけ計算するなら、Excelの方が手軽な場合もあります。
一方で、
- 毎週同じCSVが届く
- 毎月同じ計算をする
- 数百・数千商品ある
- 計算後に毎回同じ条件で抽出する
- 最後に別CSVとして保存する
といった作業では、同じ処理を繰り返すことになります。
Pythonなら、コードを一度用意しておけば、
CSVを読み込む
↓
粗利計算
↓
粗利率計算
↓
低粗利商品を抽出
↓
CSV保存
という一連の処理を毎回同じ手順で実行できます。
計算前に売上や原価の未入力がないか確認しておくと、計算漏れを防ぎやすくなります。

まとめ
今回は、Google ColabとPythonを使って、商品別の売上と原価から粗利・粗利率を計算しました。
実際に確認したのは、
- 売上-原価から粗利を計算
- 粗利÷売上から粗利率を計算
- 粗利率を小数1桁に整える
- 粗利率5%未満の商品を抽出
- 粗利1,000円未満の商品を抽出
- 粗利率10%未満の商品を抽出
- 低粗利商品をCSVとして保存
です。
ポイントは、単に粗利を計算するだけではなく、計算した結果から確認すべき商品だけを自動で絞り込めることです。
Excelで毎月、
粗利の数式を入力
↓
粗利率を計算
↓
数式を下までコピー
↓
フィルター
↓
低粗利商品を確認
という作業を繰り返しているなら、Google Colab+Pythonでまとめて処理できます。
毎回同じ計算やフィルターを繰り返しているなら、この方法で自動化して、面倒な作業を減らしていきましょう!


