例として、1件の売上CSVに「日付・店舗・商品・数量・単価」の5列があるとします。東京店と大阪店の売上明細を6行入れた場合、作りたいのは次のような店舗別・商品別の集計表です。
図1:架空のCSVを使った計算結果の図示。画面デザインの実機画像ではありません。
この例では、Pythonの標準機能だけで計算する小さな検証コードを作り、6件の明細と4行の出力、総額3,840円の一致を確認しています。付属するaggregation_demo.pyは集計処理のサンプルであり、ファイル選択画面付きの完成アプリではありません。
ツールは5つの処理に分けて作る
実装では、読み込みから出力までを次の5段階に分けます。
1. 入力:利用者がCSVを選び、対象ファイルを読み込みます。
2. 形式チェック:「日付」「店舗」「商品」「数量」「単価」の列があるかを確認します。
3. 計算と集計:明細ごとに金額を計算し、店舗名と商品名の組み合わせで合計します。
4. 照合:集計前の金額合計と集計後の金額合計が一致するか確かめます。
5. 出力:結果をCSVまたは指定したExcel様式へ書き出します。
この順序にする理由は、間違ったデータをそのまま集計しても、見た目だけは正しい表ができてしまうからです。たとえば数量の列に文字が混ざっているのに、エラーを無視して一部の行だけ足すと、売上が少なく表示されるかもしれません。今回の検証用コードは、不正な数値や必須項目の空欄があれば処理を止める設計です。
先に決めないと失敗しやすい4つのこと
1.毎月のCSVは本当に同じ形式か
列の名前が「売上日」から「日付」に変わる、列の順番が入れ替わる、文字コードが違う、といった変化は珍しくありません。列名を使って読み込めば順番の変化には対応しやすくなりますが、列名そのものが変わるなら対応表やチェックが必要です。
今回のサンプルコードはUTF-8(ユーティーエフ・エイト)形式のCSVを対象にしています。Shift_JIS系のCSVまで扱うには、文字コードの仕様を追加で決めます。
2.空欄・重複・返品をどう扱うか
空欄をゼロとして集計するのか、エラーとして止めるのかで結果が変わります。また、まったく同じ2行があっても、二重登録なのか、同じ商品の別取引なのかはデータだけでは断定できません。注文番号などの識別子がなければ、安易に重複削除すべきではありません。
返品で数量がマイナスになる場合や税込・税抜が混在する場合も、先に計算ルールを決めます。今回の簡易サンプルは返品・税計算・重複排除には非対応です。
3.集計の単位は何か
「売上をまとめる」だけでは仕様が決まりません。店舗別、商品別、担当者別、月別のどれで集計するのか。売上日は注文日なのか入金日なのか。金額は値引き前なのか値引き後なのか。ここが曖昧だと、ツールが正常動作していても、欲しい数字とは違ってしまいます。
4.結果はどこに出すか
結果をCSVで出すだけなら比較的単純です。一方、部署で使っているExcel帳票に指定セルへ転記する、グラフも作る、複数のシートへ振り分ける、といった要望が増えるほど出力側の設計が必要になります。
Excelだけで作るか、Pythonで専用ツールにするか
ExcelのPower Query(パワークエリ)で十分なケースもあります。同じ構造のCSVをフォルダーから結合し、列を整えて集計するような作業なら、Excelの更新操作を中心とした運用ができます。複数CSVの結合についてはMicrosoft公式にも手順があります。
Pythonが向くケースは、細かい条件分岐が多い、複数形式のファイルが混在する、エラーの一覧が欲しい、独自画面でファイルを選びたい場合などです。Pythonのcsvモジュールで読み込み、条件に応じて計算し、結果を書き出す方法があります。規模や計算内容によってはpandas(パンダス)の集計機能も選択肢です。
ただし、Pythonで書いたコードがそのまま誰のパソコンでもダブルクリックで動くわけではありません。Windows向けの画面付きアプリにするのか、Pythonの実行環境を用意するのか、社内のPC制限があるのかまで確認します。
制作を依頼するなら、何を渡せばよいか
仕様書を一から作る必要はありません。次の情報があると、対応範囲と見積りを具体化しやすくなります。
・ 入力の見本:個人情報・機密情報を置き換えたCSV数行と、列名が分かるもの。
・ 出力の見本:最終的に欲しい表の見本。手書きの表でも構いません。
・ 集計ルール:何を基準にグループ化し、どの金額を計算するか。
・ 例外の扱い:空欄、返品、重複、列名変更が起きたときの希望。
・ 利用環境:WindowsかMacか、Excelの有無、利用者数、毎回の行数。
私の提供方針では、仕様が明確な小規模・単機能の開発は原則10,000円から、複雑な条件や複数ファイル・画面制作などを伴う場合は個別見積りです。金額は機能数だけではなく、データ形式・エラー処理・テスト範囲でも変わります。購入前のココナラ内メッセージ相談は無料ですが、個別の開発や試作まで無料という意味ではありません。
納品前に確認したいのは「動く」より「数字が合う」こと
確認には、正常なCSVだけでなく、列が足りないCSV、数量に文字が入ったCSV、空欄を含むCSVも使います。合計が一致するかだけでなく、誤った入力があったときに黙って集計しないかも重要です。
今回のサンプルでは、6行を4行へまとめた総額が3,840円になること、必須列がない場合にエラーになること、数値に文字が混ざる場合にエラーになることを検証します。これは実際に提供する個別案件の全条件を検証したという意味ではありません。
CSV集計の自動化は、難しい画面を作ることが目的ではありません。毎月同じデータを入れたら、同じルールで、確かめられる結果が出ることが目的です。入力CSVと欲しい集計表の見本があれば、自分でExcelを使うべきか、専用ツールを作るべきかを判断しやすくなります。