数千点の部品の単価台帳を、外注せずPythonとAIで整えた話
はじめに
以前の記事で、2年分(25ヶ月)の月次データをPythonで一気に集約した話を書きました。その続編にあたるのが、今回のお話です。
データを集約しただけでは、業務には使えません。集約された山のような数字の中から、部品ごとに「いつ時点の、どの単価が、最新で有効なのか」を取り出して、ようやく「単価台帳」になります。
特にシステム移行を見据えた場面では、ここが効いてきます。新しいシステムに持っていく単価データに、「この値はいつのものか」という根拠が必ず必要になるからです。
今回は、その「最新の有効単価を、根拠つきで取り出す」工程を、Pythonで自動化した話です。
業務課題:部品数千点の「最新有効単価」を、月次データから手作業で追うのは現実的でなかった
状況はこうでした。
集約済みの月次データが2年分(25ヶ月)
対象部品は数千点規模(半製品 約6,000点、材料 約500点)
システム移行や原価の見直しのタイミングで発生
部品ごとに「いつ時点の単価が最新で有効か」を人手で追うのは、部品数を考えると現実的ではない
現在在庫がない部品は最新月のデータに載っていない → 過去に遡って単価を拾う必要がある
単価がゼロの部品を「無効」として切り捨ててよいか、判断が難しい
そして、システム移行が控えていました。新しいシステムへの単価データの引き継ぎ精度が、移行の成否に直結する局面です。「この単価はいつ時点のものか」が説明できないと、移行後の単価管理がぐらつきます。
専用のマスタ整備サービスに頼む手もあります。ですが、部品ごとの細かい判定ルールがあり、外に丸投げしにくい性質の作業でした。「社内の業務知識と、データ処理の自動化を、両方かみ合わせないと進まない」タイプの仕事だったのです。
解決策:部品ごとに「最新の有効月」を判定し、根拠つきで単価を取り出す
そこで、Pythonで以下を一気にこなす単価抽出ツールを、AIアシスタント(Claude)と一緒に開発しました。
2年分の月次データ(集約済み)を読み込む
部品コードごとに、データが存在する最新月を判定
現在在庫がない部品は、在庫があった直近月まで自動で遡って単価を取得
取得した単価には「いつ時点のものか(取得年月)」を根拠として併記
半製品・材料それぞれを一覧として出力
実行は数分。手で追うと現実的でなかった作業が、コーヒーを淹れている間に終わります。
使用した技術
Python 3.x
pandas(月次データの結合・最新月判定・遡り抽出)
openpyxl(結果のExcel出力)
AIアシスタント(Claude)(設計補助・コード生成・デバッグ)
「データ処理はPython一択?」と聞かれることがありますが、Excelでも頑張ればできます。ただ、部品数が数千点、月数が25ヶ月、遡り判定や根拠の付記まで入ってくると、関数で組むのはつらくなります。Pythonで書いたほうが、後から見直しや再実行もしやすい規模です。
現場で効く技術的な工夫
このツールには、現場で実際にデータと向き合う中で見えてきた工夫を、いくつか盛り込んでいます。
工夫①:最新月にいない部品を、過去に遡って拾う
最新月のデータをそのまま取り出すと、現在在庫がない部品は抜け落ちます。「在庫がないんだから単価もいらないでしょ?」と思いきや、システム移行では過去の部品もマスタに残す必要があったりします。
そこで、部品ごとに「最後にデータに登場した月」まで自動で遡り、その時点の単価を拾う設計にしました。
工夫②:「単価ゼロ=無効」を、途中で考え直した
これは少し恥ずかしい話なのですが、当初は「単価ゼロ=無効データ」として除外する設計にしていました。プログラム的にはきれいです。最初は、それで問題なさそうに見えました。
ですが、現場の感覚と照らし合わせると、違っていたのです。**「ゼロも実態として有効なデータ」**であるケースがありました。
しかし、単価がゼロになるのには、無償支給や計上タイミングのずれといった事情があり、一律に「無効」とは切り捨てられませんでした。
これを機械的に切り捨てると、本来残すべき部品が消えてしまう。気づいた時には、すでに最初の動作確認まで進めたあとでした。
そこで、ゼロも含めて取得する方針に修正しました。一見シンプルな仕様変更ですが、考え方としては結構大きな転換です。「ゼロ=空っぽ=無効」ではなく、「ゼロも、その部品の状態を表す立派なデータ」として扱う、という発想に切り替えたわけです。
「プログラムで一律に決め打ちしてはいけない判定がある」ことを、改めて学ばせてもらった工程でした。
工夫③:単価には必ず「取得年月」を添える
各単価に、取得年月を必ず併記する設計にしました。シンプルですが、これがあとで大きく効いてきます。
地味な三つですが、丁寧に積み上げたことで、出力された一覧がそのまま業務に使える品質になりました。
正直に書くトレードオフ
このツールはメリットだけではありません。
元データの部品コードや月の表記が揃っていることが前提です。表記ゆれがあると突合できないので、事前の整備が必要な場合があります
「単価ゼロをどう扱うか」のような判断は、最終的には人が業務ルールとして決める必要があります。プログラムは決めたルールを忠実に実行するだけです
特に2点目は重要で、ツールは判断をしてくれません。「ゼロも有効として含める」と決めたのは現場の判断であって、プログラムが自動で決めたわけではない。業務知識と判断は人、その実行は自動化、という線引きを意識する必要があります。
効果:単価データに「根拠」がついて、システム移行に持っていける状態になった
効果はもちろんありました。
抽出規模:半製品 約6,000点、材料 約500点を一括処理
在庫切れ部品:過去に遡って単価を補完でき、抜けがなくなった
根拠の追跡:取得年月を併記することで、後から説明可能な状態に
再現性:別期間・別データでも再実行可能な処理として残った
ただ、本当の価値は別のところにあったと感じています。
それは、単価データに「根拠」がついたことそのものでした。
これまでは「この単価、いつのものですか?」と聞かれても、追うのに時間がかかっていた。最新かどうかも、ぱっと答えられない。現状把握に毎回コストがかかる状態だったのです。
ツールを通したあとは、部品を見れば「この単価は、◯年◯月時点のもの」と即答できる。システム移行でも「移行データの根拠は、各部品ごとに月単位で追跡可能です」と説明できる。監査にも耐える状態に整いました。
つまり、「最新の有効単価を取り出す」という単純な処理の自動化が、結果として単価データそのものの信頼性を底上げしました。「次の一手(=システム移行)」を、根拠を持って進められる状態になった。これが、このツールの本当の価値でした。
こんな業務にも応用できます
「時系列で蓄積されたデータから、部品ごとに最新の有効値を取り出したい」業務であれば、業種を問わず応用可能です。
システム移行前のマスタデータ整備(単価・規格値などの引き継ぎ)
部品ごとの最新価格を、根拠つきで一覧化したいとき
在庫切れ品も含めた、全部品の単価台帳づくり
月次の指標データから、部門ごとの最新値を抽出したいとき(KPIの最新スナップショット作成など)
ポイントは、「最新」をどう定義するかです。「部品ごとに、それぞれの最新が違う」という前提に立てると、応用の幅が一気に広がります。
最後に
データ集約と単価抽出は、製造業のマスタ整備で何度も登場する作業です。手でやろうとすると、部品数と月数の掛け算で工数が爆発します。一方で、ロジック自体は単純。自動化の効果が出やすい領域でもあります。
そして何より、システム移行のような重要な局面で、「データの根拠が説明できる」状態を作っておくことの価値は、想像以上に大きいです。
製造業の現場で「単価マスタの整備に苦戦している」「過去の単価から最新版を見つけるのが大変」というお悩みがあれば、コメントをください。解決に役立つ、もう少し深堀した記事をお届けします。
関連記事:AIの答えを、私はまだ信じきれない。「検算する」という習慣の話(シリーズ④「AI活用の考え方」第2回)
関連記事:退職するベテランの「勘」を、AIに言葉として残せるか試した話(シリーズ④「AI活用の考え方」第3回)
