その発注量は、いつから100個なのか
購買の台帳をめくっていて、ある部品の発注ロットが「100個」で固定されているのを見つけたとする。なぜ100個なのかを聞いて回ると、たいてい誰も答えられない。前任者がそう決めていた、システムの初期値がそうなっていた、ケース入数が100個だから——理由らしきものは出てくるが、費用の話は最後まで出てこない。
在庫の発注量は、まとめて多く買えば発注1回あたりの事務の手間が薄まり、その代わり在庫が長く積み上がって金利と倉庫代を食う。逆を向いた2つの費用の綱引きで、綱引きである以上どこかに釣り合う点がある。それが経済的発注量(EOQ)だ。
面白いのは、その釣り合いの点がかなり鈍感だということ。EOQ から発注量を倍にずらしても、半分にずらしても、年間の総コストはどちらも25%しか増えない。つまり多少ズレていても損は知れているが、桁が違うと効いてくる。100個か1,000個かは大問題で、100個か120個かは誤差の範囲。この鈍感さこそが、EOQ を一度だけでも計算しておく価値の説明になっている。実際の数字は後半の使用例で確かめてほしい。
そしてもう一本、発注量とは別の軸がある。需要は平均どおりには出ないから、そのばらつきに備える在庫——安全在庫が要る。この2本を1画面で繋いだのがこのツール。
「EOQ の記事」と「安全在庫の記事」が、なぜ別々に置かれているのか
「経済的発注量 計算」「安全在庫 計算」「発注点 計算」で順に検索してみると、上位に来るのが毎回まったく別の記事になる。EOQ の解説ページは EOQ の式で終わり、安全在庫の解説ページは安全係数の表で終わり、発注点のページは「発注点 = リードタイム期間の需要 + 安全在庫」で終わる。それぞれは正しいのに、読み終えても手が動かない。
ところが実際の計算は、切れているどころか一本に繋がっている。EOQ が決まると年間の発注回数が決まり、発注回数が決まると発注間隔が決まる。そして定期発注方式では、その発注間隔が安全在庫の √ の中に入ってくる。つまり安全在庫を求めるのに EOQ の結果が要る。この繋がりを計算に落としているページが、探しても見当たらなかった。式を3つ並べて「あとはご自身で」と手渡されるのが標準になっている。
実務側の供給も似た状態で、配布されているのはたいてい Excel テンプレート。ダウンロードして開いてマクロを許可して、という段取りを踏まないと数字が出ない。ブラウザだけで最後まで終わるものは実質1つしか見つからなかった。
だから、EOQ からその先まで一気に落ちるところまでを1画面に入れた。入力は年間需要量・発注費用・単価・在庫維持費率・リードタイム・稼働日数、それに日別需要の標準偏差とサービス率だけ。
実装中に決めた判断もひとつ書いておく。定期発注方式を選んだときは、発注点をあえて表示しないことにした。定期発注方式は「決まった日が来たら発注する」という日付でトリガーする方式で、在庫量でトリガーする発注点という概念がそもそも無い。それでも数字としては計算できてしまうので、併記すると必ず誤用される。代わりに基準在庫(最大在庫量)を出し、「発注量 = 基準在庫 − 現在庫 − 発注残」という注記を必ず添えている。現在庫を入力させていない以上、基準在庫をそのまま発注量と読まれるのがいちばん怖い。
経済的発注量と安全在庫は、何を計っている数字なのか
経済的発注量 とは — 逆を向いた2つのコストの綱引き
年に8,000個使う部品があるとする。1回に何個ずつ発注するか、という問いを費用の言葉に翻訳すると、こうなる。
ひとつ目は年間発注費用。発注1回ごとに見積・発注書・検収・入庫処理といった事務が発生し、そこに人件費がかかる。この費用は数量に比例せず、1回いくらでかかる。だから年間の発注費用は「年間需要量 ÷ 1回の発注量 × 1回あたりの発注費用」、式で書けば D/Q × S になる。Q を大きくすれば発注回数が減るので、この費用は Q に反比例して下がる双曲線を描く。
ふたつ目は年間在庫維持費用。まとめて買えば、その在庫は使い切るまで倉庫にいる。到着直後は Q 個あり、使い切る直前は0個なので、平均すると Q/2 個が常に寝ていることになる。そこに1個1年あたりの維持費 H を掛けて Q/2 × H。こちらは Q に比例して増える直線。
下がる双曲線と上がる直線を足せば、和は下に凸の曲線になる。その底が経済的発注量だ。
年間総コスト TC(Q) = (D / Q) × S + (Q / 2) × H
Q で微分してゼロと置く:
−D×S / Q² + H / 2 = 0
→ Q² = 2×D×S / H
→ EOQ = √(2 × D × S / H)
これが1913年に Ford W. Harris が示した式で、Wilson の公式とも呼ばれる(経済的発注量(Wikipedia))。
EOQ 計算式でいちばん取り違えられる分母、年間在庫維持費 H
式そのものより事故が多いのが、分母の H の作り方。H は「1個を1年持ち続けたときにかかる費用」で、ふつうは単価に対する率で与えられる。
年間在庫維持費 H [円/個/年] = 品目単価 C × 年間在庫維持費率 i[%] ÷ 100
例: 単価 250円 × 20% ÷ 100 = 50 円/個/年
÷100 を忘れて 250 × 20 = 5000 としてしまうと H が100倍になり、EOQ は √ の分母に入っているので10分の1に縮む。逆に率をそのまま小数と勘違いして 250 × 0.2 = 50 と書けば正しいが、250 × 0.002 のように桁を落とすと EOQ が10倍に膨らむ。答えが桁でずれるときは、まず H を疑うのが速い。このツールが H を独立した出力として画面に出しているのはそのため。
もうひとつ押さえておきたいのが、EOQ では年間発注費用と年間在庫維持費用がぴったり一致すること。これは偶然ではなく、双曲線と直線の和が最小になる点が両者の交点になるという構造そのものだ。手計算の検算にそのまま使える性質で、2つの数字が揃わなければどこかで間違えている。
安全在庫 求め方 — ばらつき × さらされる期間 × 許す欠品
EOQ の世界では需要は毎日きっちり同じだけ出る。現実はそうならないから、平均を超えて出た分を吸収する在庫が要る。それが安全在庫で、必要量は3つの掛け算で決まる。
安全在庫 SS = 安全係数 k × 日別需要の標準偏差 σd × √(さらされる日数)
- σd(どれだけばらつくか): 日ごとの出荷数の標準偏差。ばらつきが2倍なら備えも2倍。
- √日数(どれだけの期間さらされるか): 日数そのものではなく平方根で効く。独立した日々のばらつきを足し合わせると、分散が日数に比例し、標準偏差はその平方根になるため。4日守るのに必要な備えは1日の2倍で、4倍ではない。
- k(どこまで欠品を許すか): 需要が正規分布に従うとみて、上側の何σまで守るかを決める係数。
3つ目の k を決めるのがサービス率だ。サービス率95%とは「需要をまかなえる確率が95%」であり、裏返せば欠品許容率5%——発注サイクル20回に1回は在庫が尽きうる水準ということになる。この裏表の関係が飲み込めると、サービス率を上げることが何を買っている行為なのかが見えてくる。
安全係数 と サービス率 の対応表
このツールが使っている安全係数は次の5つ。
| サービス率 | 欠品許容率 | 安全係数 k |
|---|---|---|
| 90% | 10% | 1.29 |
| 95% | 5% | 1.65 |
| 98% | 2% | 2.06 |
| 99% | 1% | 2.33 |
| 99.9% | 0.1% | 3.10 |
日本の在庫管理実務で流通している表と同じ値で、ロジクラ 在庫管理大学の安全係数表 や 日立ソリューションズ東日本の安全在庫解説 に載っているものと一致する。既定値は95%にしてある。製造業でもっとも広く採られている水準で、中小企業診断士のテキストの例題もたいていこの値だからだ。
定量発注方式 と 定期発注方式 の違いは、√ の中身に出る
最後がこのツールの核になる話。発注のトリガーの掛け方には大きく2通りある。
定量発注方式(発注点方式) は、在庫がある水準まで減ったら毎回同じ量を発注する。トリガーは在庫量。定期発注方式 は、毎週金曜のように決まった日が来たら、そのつど必要量を計算して発注する。トリガーは日付。
冷蔵庫の牛乳で考えると分かりやすい。「残り1本になったら買いに行く」のが定量発注、「毎週土曜のまとめ買いで足りない分を買う」のが定期発注。前者は残り1本を切ったその日に動けるので、無防備なのは店に行って帰るまで——つまり調達リードタイムの間だけ。後者は水曜に減ってきたことに気づいても次の土曜まで動けないので、発注間隔のぶんも見込んで多めに買っておく必要がある。
これがそのまま安全在庫の式に出る。
定量発注方式: SS = k × σd × √(リードタイム)
定期発注方式: SS = k × σd × √(リードタイム + 発注間隔)
そして定期発注方式の √ に入る発注間隔は、EOQ から逆算した値だ。EOQ → 発注回数 → 発注間隔 → 安全在庫、と一本に繋がる。同じ品目・同じサービス率でも定期発注方式のほうが安全在庫が大きくなるのはこの構造による。
出力も方式で入れ替わる。定量発注方式なら 発注点 ROP = リードタイム期間の需要 + 安全在庫、定期発注方式なら 基準在庫 = 平均日需要 ×(リードタイム + 発注間隔)+ 安全在庫 で、実際に出す量は基準在庫から現在庫と発注残を引いた残りになる。
在庫は寝ている資金、欠品は止まるライン
発注量と安全在庫を決めずに運用すると、何が起きるか。
まず在庫は、そのまま固定された資金だ。平均在庫が何個かは EOQ と安全在庫で決まり、そこに単価を掛けた金額が一年中倉庫に置かれ続ける。高単価の部品なら、たった数十個の平均在庫でも数百万円が動かないまま滞留する。在庫維持費率を20%とするなら、その金額の2割が毎年出ていく計算になる。
逆に安全在庫を削りすぎると欠品する。製造ラインなら止まり、小売なら販売機会そのものが消える。ここで効いてくるのが非対称性だ。在庫を1個余分に持つコストは単価の2割程度だが、欠品1回でラインが半日止まったときの損失は、その品目の年間在庫維持費を軽く超えることが珍しくない。だから「サービス率を上げるコストは加速度的に増えるのに、それでも上げる品目がある」という状況が生まれる。
コストが加速度的に増える、というのは係数の比を見れば分かる。サービス率95%の k は1.65、99.9%の k は3.10。1.88倍だ。サービス率を4.9ポイント上げるために安全在庫を1.88倍積む。90%から95%への引き上げ(1.29→1.65、1.28倍)と比べると、上に行くほど1ポイントあたりの負担が重くなっていくのが見て取れる。だから品目ごとにサービス率を変える。代替の効く汎用品を99.9%で守るのは、単に在庫を捨てているのと変わらない。
単位の取り違えが、事故のほとんどを占める
計算そのものより頻繁に間違えるのが入力の単位だ。実務で見かける事故は2つに集中している。
ひとつは σd に月次の標準偏差を入れてしまうこと。式の中の √ は日数を受け取る前提なので、月別の出荷数の標準偏差を放り込むと、備えるべき期間の尺度が丸ごとズレる。月次のばらつきは日次のおよそ √30 ≈ 5.48倍の大きさになるため、安全在庫も5倍以上に膨らむ。倉庫が急に埋まるのはたいていこれ。
もうひとつは 年間稼働日数を365日のままにすること。平均日需要は年間需要量をこの日数で割って作るので、実際は週5日稼働(240日前後)の工場で365日と入れると、平均日需要が 240/365 ≒ 3分の2 に薄まる。平均日需要はリードタイム期間の需要にも発注点にも直結するので、発注点が同じ比率で小さく出て、気づかないまま欠品しやすい設定になる。
在庫維持費率をどう決めるか
年間在庫維持費率 i は、倉庫費・保険料・陳腐化による価値の目減り・その資金を他に回せていたら得られたはずの機会費用、これらの合計を品目価格に対する割合で表したもの。実務では15〜30%を採ることが多い。
ただし陳腐化の速さは品目でまるで違う。電子部品やアパレルのように1年で価値が大きく落ちるものは、率を高めに取らないと実態に合わない。そしてここを小さく見積もると、H が小さくなり EOQ の分母が小さくなるので、EOQ が過大に出て在庫が膨らむ。「EOQ を計算したのに在庫が増えた」という話の裏側にはたいてい低すぎる在庫維持費率がある。
発注ロットを見直したくなる4つの場面
新しく取り扱う品目の初回ロットを決めるとき。 前例が無いので「いつもの数量」が使えない。年間見込み数量と発注1回の事務コスト、単価、在庫維持費率を入れれば、費用構造から発注量が出る。前任者の数字を引き継ぐのではなく、ゼロから根拠を作れる唯一の場面でもある。
在庫を減らせと言われたとき、どこを削るかを切り分ける。 在庫は「回転している分(EOQ の半分)」と「備えの分(安全在庫)」でできている。安全在庫のほうが EOQ より大きくなっている品目は、発注ロットをいくら詰めても在庫はほとんど減らない。手を入れるべきは需要のばらつきかリードタイムのほうだ。このツールは安全在庫と EOQ を並べて出すので、どちらが主役かがその場で分かる。
仕入先を変えてリードタイムが変わったとき。 発注点はリードタイム期間の需要と安全在庫の和なので、リードタイムが動けば両方が動く。新しい日数を入れ直せば、発注点をいくつに直せばよいかが出る。定期発注方式で運用している品目なら、基準在庫のほうが更新対象になる。
中小企業診断士 運営管理・QC検定の計算練習。 経済的発注量、発注点、定期発注方式の基準在庫は、いずれも頻出の計算問題。手計算した答えを入れ直せば、途中の年間在庫維持費 H や発注間隔まで含めて突き合わせられる。どの段で間違えたかが分かるのが、答えだけ見るのとの違い。
3ステップの使い方
ステップ1:発注方式を選ぶ。 定量発注方式(発注点方式)と定期発注方式の2択。選んだほうに応じて、定量なら発注点、定期なら基準在庫(最大在庫量)が主要な出力として表示される。安全在庫の計算対象になる期間も、この選択で切り替わる。
ステップ2:需要と費用を入れて EOQ を読む。 年間需要量・1回あたりの発注費用・品目単価・年間在庫維持費率・調達リードタイム・年間稼働日数を入力する。経済的発注量に加えて、年間発注回数、発注間隔、年間発注費用、年間在庫維持費用、年間総コスト、そして分母になる年間在庫維持費 H が表示される。あわせて横軸を発注量、縦軸を年間コストにしたコスト曲線が描かれ、発注費用の曲線・在庫維持費用の直線・総コストの曲線の3本と、EOQ の位置を示す縦の破線が引かれる。底がどれだけ平たいかを見るための図で、発注量を EOQ の半分/2倍にしたときの総コストも数字で添えられる。
ステップ3:ばらつきを入れて安全在庫と発注点を出す。 日別需要の標準偏差 σd とサービス率を入れると、対応する安全係数 k、安全在庫、安全在庫の対象日数(√ の中身)が表示され、定量発注方式なら発注点、定期発注方式なら基準在庫が出る。σd は任意入力で、空欄のままなら安全在庫まわりの項目だけが「—」になり、EOQ・発注回数・発注間隔・コスト・コスト曲線はいつもどおり計算される。ばらつきの実績がまだ手元に無くても、先に EOQ だけ確かめられるということ。
入力に迷ったら、診断士の典型問題・製造業の高単価部品・小売やECの低単価消耗品・需要変動が大きい品目の4つのプリセットから選べば、一度に全項目が埋まる。
8つのケースで確かめる、入力と結果
以下はすべて、実装した計算エンジンに同じ入力を与えて得た値をそのまま載せている。手元で入力すれば同じ数字が出る。
ケース① 診断士の典型問題(定量発注方式・EOQ がちょうど400個)
入力: 年間需要量 8,000個/年・発注費用 500円/回・単価 250円・在庫維持費率 20%・リードタイム 5日・年間稼働日数 240日・σd 8個/日・サービス率 95%
結果: H = 50円/個/年、EOQ = 400.0個、年20.0回・12.0日ごとの発注、平均日需要 33.33個/日。年間発注費用 10,000円、年間在庫維持費用 10,000円、年間総コスト 20,000円。安全係数 k = 1.65、対象日数 5.0日、安全在庫 29.5個、リードタイム期間の需要 166.7個、発注点 196.2個、平均在庫 229.5個。
解釈: 年間発注費用と年間在庫維持費用が10,000円で完全に一致している。これが EOQ に到達した証拠で、手計算の検算にそのまま使える。発注量を200個(EOQ の半分)にしても800個(2倍)にしても総コストは25,000円で、どちらも+25%。平均在庫229.5個に単価250円を掛けると約5.7万円が常時寝ている勘定になる。
ケース② まったく同じ入力を、定期発注方式に切り替える
入力: ケース①と全項目同一。発注方式だけ定期発注方式に変更。
結果: EOQ・発注回数・発注間隔・各コストはケース①と1円も変わらない(EOQ 400.0個、年20.0回、12.0日ごと、総コスト20,000円)。変わるのは安全在庫まわりで、対象日数が 5.0日 → 17.0日(リードタイム5日 + 発注間隔12日)、安全在庫 29.5個 → 54.4個。発注点は表示されず、代わりに 基準在庫 621.1個。平均在庫も229.5個から254.4個に増える。
解釈: このツールでいちばん見てほしい対比。同じ品目・同じサービス率でも、発注のトリガーを日付にした瞬間に安全在庫が 1.84倍 になる。√17 ÷ √5 が1.844なので、増分はすべて √ の中身の違いから来ている。定期発注方式は発注日をまとめられて事務は楽になるが、その対価を安全在庫で払っているということ。基準在庫621.1個はそのまま発注する量ではなく、ここから現在庫と発注残を引いた残りが実際の発注量になる。
ケース③ サービス率だけを95%から90%に下げる
入力: ケース①と全項目同一。サービス率のみ90%(欠品許容率10%)。
結果: EOQ とコストはケース①と完全に一致。安全係数が 1.65 → 1.29、安全在庫 29.5個 → 23.1個、発注点 196.2個 → 189.7個。
解釈: 安全在庫は k に正比例するので、23.1 / 29.5 = 0.78 とちょうど係数の比になっている。欠品許容率を5%から10%に緩めると備えが22%減る。代替の効く汎用品ならこの判断は十分あり得るし、逆に言えばサービス率の設定は在庫金額に直接跳ね返る意思決定だということ。
ケース④ 高単価部品と低単価消耗品 — EOQ の桁がまるで違う
入力A(製造業の部品調達): 年間需要量 1,200個/年・発注費用 15,000円/回・単価 45,000円・在庫維持費率 15%・リードタイム 30日・稼働日数 250日・σd 1.5個/日・サービス率 99%
結果A: H = 6,750円/個/年、EOQ = 73.0個、年16.43回・15.2日ごと。年間発注費用と年間在庫維持費用がともに246,475円、総コスト 492,950円。k = 2.33、対象日数30.0日、安全在庫 19.1個、発注点 163.1個、平均在庫 55.7個。
入力B(小売・ECの消耗品): 年間需要量 180,000個/年・発注費用 800円/回・単価 120円・在庫維持費率 25%・リードタイム 3日・稼働日数 365日・σd 90個/日・サービス率 98%
結果B: H = 30円/個/年、EOQ = 3,098.4個、年58.09回・6.28日ごと。発注費用と在庫維持費用がともに46,476円、総コスト 92,952円。k = 2.06、対象日数3.0日、安全在庫 321.1個、発注点 1,800.6個、平均在庫 1,870.3個。
解釈: EOQ が 約42倍 違う。高単価品は1個持つコスト(H = 6,750円/個/年)が重いので小刻みに発注するのが正解になり、低単価品は H が30円しかないのでまとめ買いが効く。ただし在庫金額で見ると逆転する——Aの平均在庫55.7個は単価45,000円で約250万円、Bの平均在庫1,870個は単価120円で約22万円。個数の直感と金額の直感がずれることが、EOQ を品目ごとに計算する理由そのものになっている。
ケース⑤ 需要変動が大きい品目 — 安全在庫が EOQ を追い越す
入力: 年間需要量 6,000個/年・発注費用 3,000円/回・単価 800円・在庫維持費率 20%・リードタイム 20日・稼働日数 250日・σd 60個/日・サービス率 99.9%
結果: H = 160円/個/年、EOQ = 474.3個、年12.65回・19.8日ごと、総コスト 75,895円。k = 3.10、対象日数20.0日、安全在庫 831.8個、発注点 1,311.8個、平均在庫 1,069.0個。
解釈: 安全在庫831.8個が EOQ 474.3個の1.75倍あり、在庫の主役が回転分ではなく備えになっている。この状態で発注ロットを詰めても、削れるのは EOQ の半分=237個のさらに一部だけで、在庫はほとんど減らない。手を入れるべきは σd を下げること(需要予測の精度)か、リードタイムを縮めること、あるいはサービス率99.9%が本当に要る品目なのかの見直し。平均在庫1,069個 × 単価800円で約85万円が滞留している。
ケース⑥ σd を空欄のまま計算する
入力: ケース①と同一だが、日別需要の標準偏差を空欄にする。
結果: EOQ 400.0個、年20.0回、12.0日ごと、H 50円/個/年、年間発注費用10,000円、年間在庫維持費用10,000円、総コスト20,000円、平均日需要33.33個/日——ケース①と完全に一致。安全係数 k = 1.65 は表示されるが、安全在庫と発注点は「—」。平均在庫は安全在庫を含まない200.0個になる。
解釈: ばらつきの実績が無くても、EOQ とコストの側は最後まで求まる。σd は在庫のばらつき対策にしか効かず、費用のトレードオフには一切関与しないからだ。出荷実績を集計するのは後回しにして、まず発注ロットだけ見直す——という進め方ができる。k がサービス率だけで決まる値なので σd 無しでも出ている点にも注目。
ケース⑦ リードタイム0日を、2つの方式で比べる
入力A: ケース①のリードタイムを 0日 に変更(定量発注方式)。
結果A: 対象日数 0.0日、安全在庫 0.0個、リードタイム期間の需要 0.0個、発注点 0.0個、平均在庫 200.0個。
入力B: 同じくリードタイム 0日 で、発注方式だけ定期発注方式に変更。
結果B: 対象日数 12.0日(リードタイム0日 + 発注間隔12日)、安全在庫 45.7個、基準在庫 445.7個、平均在庫 245.7個。
解釈: 方式の違いがもっとも鮮明に出る組合せ。即納品目(発注したその場で届く)なら、定量発注方式では守るべき無防備な期間がゼロなので安全在庫も要らない。ところが定期発注方式では、次の発注日が来るまでの12日間は何が起きても発注できないので、45.7個の備えが残る。「リードタイムがゼロなら安全在庫はゼロ」は定量発注方式でしか成り立たない、というのがこの対比の結論。
ケース⑧ EOQ が1個未満になる — それでも切り上げない
入力: 年間需要量 120個/年・発注費用 2円/回・単価 800,000円・在庫維持費率 100%・リードタイム 10日・稼働日数 240日・σd 0.5個/日・サービス率 95%
結果: H = 800,000円/個/年、EOQ = 0.0245個、年4,898.98回・0.049日ごと、総コスト 19,596円。安全在庫 2.6個、発注点 7.6個。
解釈: 発注費用が2円しかなく、1個1年持つのに80万円かかるという極端な設定だと、数学的な最適解は「限りなく細かく分けて発注する」になる。ツールはこれを1個に切り上げず、0.0245個のまま出したうえで注記を添える。切り上げてしまうと総コストが変わってしまい、しかも実際に丸めるべき単位(最小発注ロット、ケース入数)はツール側からは分からないからだ。ここでも安全在庫2.6個が EOQ を100倍以上上回っており、在庫の中身がすべて備えになっていることが読み取れる。
実装の中身 — 定数表を選んだ理由と、平方根が作る境界
選択1: 安全係数を関数で出すか、表で持つか
サービス率から安全係数を得るには2つのやり方がある。標準正規分布の逆関数(分位点関数)を有理近似で実装して任意のサービス率に対応するか、代表的な数点を定数表として持つか。
このツールは定数表を選んだ。理由は精度ではなく、突き合わせのしやすさにある。逆関数の厳密値は 90% → 1.281552、95% → 1.644854、98% → 2.053749、99% → 2.326348、99.9% → 3.090232 で、これをそのまま表示すると、利用者が手元の安全係数表や診断士のテキストと照らしたときに数字が合わない。日本の在庫管理実務で流通している表は、この厳密値を小数第2位で切り上げた 1.29 / 1.65 / 2.06 / 2.33 / 3.10 になっているからだ。
切り上げなので安全在庫は厳密値よりわずかに大きく出る。95%なら 1.65 / 1.644854 = 1.003 で+0.3%。安全側に外れる誤差であり、そもそも σd の推定誤差のほうが桁で大きいので実害は無い。四捨五入して 1.28 / 2.05 / 3.09 にしてしまうと実務の表ともテキストとも合わなくなるため、これは採らなかった。この5値は実装前に3つの独立した資料と突き合わせ、さらに標準正規分布の逆関数値を計算して「全5値が厳密値の小数第2位切り上げと一致する」ことを機械的に確認してある。
選択2: 最小点をどう検証するか
EOQ は総コストを微分してゼロと置いても、発注費用と在庫維持費用の交点を求めても同じ式になる。実装では前者の閉じた式をそのまま使っているが、検証には後者の性質を使った。全テストケースについて年間発注費用と年間在庫維持費用を独立に計算し、両者が一致するか(相対誤差1e−12未満)を機械的に確かめている。式を写し間違えていれば、この2つは絶対に揃わない。同時に、年間総コストが √(2×D×S×H) と一致することも全件で確認した。閉じた式が2通りあり、それが常に一致するというのは、テストとして非常に都合がよい。
計算フロー
// ─ 費用側(発注方式に依存しない)
H = C × i / 100 // 年間在庫維持費[円/個/年]
EOQ = √(2 × D × S / H) // 経済的発注量[個](丸めない)
発注回数 = D / EOQ // [回/年]
発注間隔 = 年間稼働日数 / 発注回数 // [日]
年間発注費用 = 発注回数 × S
年間在庫維持費用 = (EOQ / 2) × H // EOQ では上と一致する
年間総コスト = 年間発注費用 + 年間在庫維持費用
// ─ ばらつき側
μd = D / 年間稼働日数 // 平均日需要[個/日]
k = SAFETY_FACTORS[サービス率] // 表引き
対象日数 = 定量発注方式 ? LT : LT + 発注間隔 // ★ここが方式で分岐する
SS = k × σd × √対象日数
// ─ 方式ごとの主要出力(片方だけを出す)
発注点 ROP = μd × LT + SS // 定量発注方式
基準在庫 = μd × (LT + 発注間隔) + SS // 定期発注方式
// 実際の発注量 = 基準在庫 − 現在庫 − 発注残
日別需要の標準偏差だけは空欄が正常系なので、空欄と0を厳密に区別している。0 は「需要が完全に安定していて備えが要らない」という正当な入力で、安全在庫0個・発注点はリードタイム期間の需要そのもの、という答えが返る。ここを if (!σd) のような真偽値判定で書くと、0が空欄と同じ扱いになって「未入力」に落ちてしまう。
平方根が作る、目に見えない境界
実装で最後まで残った問題が浮動小数点の扱いだった。このツールは「年に1回も発注しない設定になっている」ことを注記で知らせる。判定は単純に 発注回数 < 1 でよさそうに見える。
ところが D × H = 2 × S を満たす入力では、発注回数は数学的にちょうど 1.0 になるはずなのに、倍精度では 0.9999999999999999 になる。EOQ が平方根を経由して求まり、そこから割り算で発注回数に戻る往復で最終ビットが落ちるためだ。年間需要量500個/年・発注費用10,200円/回・単価340円・在庫維持費率12% という設定がまさにそれで、H = 40.8、EOQ = √(2×500×10,200/40.8) = √250,000 = 500 と綺麗に割り切れる——はずが、実際には EOQ が 500.00000000000006 になり、発注回数が1をわずかに下回る。素直に比較すると、ちょうど年1回発注という正しい設定に「年1回未満」の警告が出る。
この手の事故は、テストが通り、画面も普通に描画され、境界の入力を手で試さない限り見つからない。対策として、平方根を経由した値を境界と比べるところ(発注回数が年1回未満か、EOQ が1個未満か、安全在庫が EOQ を超えているか)には相対許容誤差1e−9を入れ、判定結果は計算エンジンの中で真偽値のフィールドに畳んでから画面に渡すことにした。画面側で条件式を書き直すと、許容誤差を入れた場所と入れ忘れた場所で挙動が食い違うからだ。
ステップバイステップの計算例
ケース①(年間需要量8,000個/年・発注費用500円/回・単価250円・在庫維持費率20%・稼働日数240日)を、上のフローどおりに1段ずつ追ってみる。
H = 250 × 20 / 100 = 50 円/個/年
EOQ = √(2 × 8000 × 500 / 50) = √160000 = 400 個
発注回数 = 8000 / 400 = 20 回/年
発注間隔 = 240 / 20 = 12 日
発注費用 = 20 × 500 = 10,000 円/年
維持費用 = (400 / 2) × 50 = 10,000 円/年 ← 発注費用と一致
総コスト = 10,000 + 10,000 = 20,000 円/年
検算 : √(2 × 8000 × 500 × 50) = √400000000 = 20,000 円/年 ✓
最後の1行が、総コストを別ルートで求めた検算になっている。発注費用と在庫維持費用が一致すること、そして総コストが √(2×D×S×H) と一致すること——この2つが揃えば、途中の計算は信用してよい。
数字を1個出して終わらせないための3点
前半で触れたとおり、EOQ・安全在庫・発注点は、それぞれ別のページで別々に説明されているのが現状だ。ここではその前提は繰り返さず、解説に対して上乗せしている点だけを挙げる。
- 3つを分断せず連鎖して解く — EOQ が決まれば年間発注回数が決まり、発注回数から発注間隔が決まる。そして定期発注方式では、その発注間隔が安全在庫の √ の中に入る。前の答えがそのまま次の入力になる関係を、1つの計算に落としてある
- なぜその発注量が底なのかをコスト曲線で見せる — 右下がりの発注費用と右上がりの在庫維持費用、その和である総コストを1枚に重ねて描く。EOQ の位置に縦線を引くので、底の場所だけでなく底が平たいことまで目で分かる。この平たさが、最小発注ロットへ丸めるときの判断材料になる
- 方式を切り替えると式が変わることを実演する — 定量発注方式と定期発注方式を切り替えると、安全在庫の √ の中身がリードタイムから「リードタイム+発注間隔」に入れ替わり、同じ入力のまま安全在庫が1.84倍になる。表示が差し替わるのではなく、計算そのものが変わっていることを数字で追える
生産管理の隣に並ぶツールとの役割分担
このサイトには生産管理まわりのツールが他にもあり、どれも「ばらつき」という語を使うので混同されやすい。見ている対象はまったく違う。タクトタイムと編成効率を扱うラインバランシングのツールが見るのはラインの時間の配分——工程と工程のあいだで作業量が均されているかという話だ。工程能力指数 Cp/Cpk のツールが見るのは作られたモノの寸法ばらつきが規格に収まるかという製品品質の話。そして本ツールが見るのはモノの持ち方、どれだけの量をいくらのコストで持つかという在庫の話になる。同じ看板の下にあっても物差しが別物で、在庫が多いという問題を工程時間の解析で解こうとしても噛み合わない。
EOQ の式には、発見者ではない人の名前がついている
この式が世に出たのは1913年。発表したのは Ford Whitman Harris(フォード・ホイットマン・ハリス)という技師で、当時ウェスチングハウス社に勤めていた。掲載先は学術誌ではなく Factory, The Magazine of Management という実務誌で、「1回に何個作るのが得か」という現場の問いに答える読み物として書かれている。ところがこの式は、英語圏でも日本でもしばしば「Wilson の公式」と呼ばれる。R. H. Wilson は1930年代にこの手法を在庫管理の実務へ広めたコンサルタントで、式を見つけた人ではない。普及させた側の名が定着し、発見者の名が薄れたわけだ。後年の研究では、Harris の原典が正確に引用されないまま孫引きされ続け、実物を確認した人がほとんどいない状態が長く続いたことも指摘されている。100年以上使われている式にしては、出自の扱いがずいぶん雑だ。
「EOQ とジャストインタイムは矛盾するのか」問題
EOQ はまとめ買いを正当化する式に見える。一方でトヨタ生産方式は小ロット化を進めた。対立しているように語られることがあるが、式を見れば話は単純だ。EOQ は発注費用 S を所与の定数と置いて最適なロットを求める。トヨタ生産方式がやったのは、その S 自体を攻めることだった。段取り替えに何時間もかかるなら1回の生産量は大きくせざるを得ないが、段取り時間を分単位に縮めれば小ロットでも割に合う。S は √ の中にあるので、S を4分の1にすれば EOQ はちょうど半分になる。両者は矛盾ではなく、S を定数と見るか変数と見るかの違いでしかない。
全品目に EOQ を適用する現場は無い
品目が数千あるとき、そのすべてで発注費用と在庫維持費率を精査するのは割に合わない。そこで使われるのが ABC分析だ。年間使用金額の大きい順に並べると上位の少数が金額全体の大半を占めるので、この A 品目だけを EOQ と安全在庫で精緻に管理し、C 品目はダブルビン方式のような簡便法で回す。管理の手間もまたコストであり、そのコストを EOQ の式は見ていない——という自覚があって初めて、この式は実務の道具になる。
参考: Economic order quantity (英語版 Wikipedia)
実務で外さないための5つの目安
1. EOQ は倍半分の範囲なら誤差25%以内。丸めてよい 発注量を EOQ の半分にしても2倍にしても、年間総コストはどちらも EOQ 時点の1.25倍で止まる。最小発注ロットやケース入数へ丸めることを恐れる必要はない。実際にいくらになるかは、使用例のケースやコスト曲線で確認してほしい。
2. 在庫を減らす前に、安全在庫と EOQ のどちらが大きいかを見る 安全在庫のほうが大きい品目は、在庫の主役が回転分ではなく備えになっている。この状態で発注ロットを詰めても在庫はほとんど減らない。使用例の需要変動が大きいケースがその典型だ。
3. σd は日別の出荷実績から出す 月次の標準偏差を入れると桁がずれる。√ の中に日数が入っている以上、ばらつきの単位も日で揃える必要がある。週次データしかないなら、まず日別に分解できないかを疑う。
4. サービス率は品目ごとに変える 欠品するとラインが止まる部品と、代替が効く汎用品を同じ水準で守るのは在庫の無駄だ。サービス率を1段変えて安全在庫がどれだけ動くかは、結果に出る安全係数 k を見比べればすぐ分かる。
5. 在庫維持費率を小さく見積もると EOQ が過大に出る 率は EOQ の分母を作る。倉庫費や資金の機会費用だけで見て陳腐化を入れないと、率が小さくなり、まとめ買いが有利という結論が出る。電子部品やアパレルのように陳腐化の速い品目では率を高めに取る。
つまずきやすいポイントへの回答
定期発注方式を選んだら発注点が表示されなくなった
不具合ではなく、意図してそうしている。定期発注方式は「決まった日が来たら発注する」方式で、在庫量ではなく日付が引き金になる。したがって発注点という概念そのものが存在しない。日付でトリガーする運用に在庫量のトリガーを併記すると必ず誤用される。代わりに表示されるのが基準在庫(最大在庫量)で、「発注日にこの水準まで戻す」という目標値だ。実際に発注する数量は、基準在庫から現在庫と発注残を引いた値になる。現在庫は入力していないので、基準在庫をそのまま発注量として読まないよう注記を添えてある。
日別需要の標準偏差が手元に無い。それでも使えるのか
使える。σd は任意入力で、空欄のままでも EOQ・年間発注回数・発注間隔・各コスト・コスト曲線はすべて通常どおり計算される。「—」になるのは安全在庫と発注点(または基準在庫)だけだ。安全係数 k はサービス率だけで決まる値なので、σd が空欄でも表示される。発注ロットをいくつにすべきかという問いと、ばらつきにどれだけ備えるかという問いは独立していて、前者は出荷実績を調べる前でも答えが出る。日別に集計できたら後から入れ直せばよい。なお σd に 0 を入れるのは空欄とは別の意味で、「ばらつきがゼロ」として安全在庫 0 が算出される。
EOQ が小数で出る。なぜ切り上げてくれないのか
丸める単位をツールが知らないからだ。実務で発注量を丸める先は最小発注ロットだったりケース入数だったりパレット単位だったりする。1個単位に切り上げるのが正解とは限らず、そこは使う側の情報でしか決められない。切り上げた時点で年間総コストも変わるため、勝手に丸めた値を「最適」と表示するのは誤解のもとでもある。丸めた結果いくら損するのかは、コスト曲線と、発注量を EOQ の半分・2倍にしたときの総コストを見れば見当がつく。底は平たいので、常識的な単位に丸めるぶんには影響は小さい。
安全在庫が EOQ より大きいと出た。入力を間違えている?
間違いとは限らない。需要のばらつきが大きい品目や、リードタイムが長くサービス率を高く設定した品目では、安全在庫が1回の発注量を上回ることが実際に起きる。在庫の主役が「回転している分」ではなく「動かない備え」になっている状態だ。実務上の含意ははっきりしていて、この品目は発注ロットをどういじっても在庫が減らない。手を入れるべきは需要のばらつき(予測精度・出荷の平準化)か、リードタイムの短縮か、サービス率の設定そのものになる。この状態では結果にその旨の注記が添えられる。
年間稼働日数には何を入れればいい?
実際に消費または販売が発生する日数を入れる。製造業なら週5日×48週で240日前後、年中無休で回している小売・EC なら365日が目安になる。この値は年間需要量を割って平均日需要を作る分母であり、発注間隔を日数に換算するときの元にもなる。ここを間違えると、平均日需要とリードタイム期間の需要、そして発注点までが同じ比率でずれる。製造業なのに365日のまま計算すると平均日需要が3分の2に薄まり、発注点が現実より小さく出る。整数しか入力できないのは、240.5日という分母に意味が無いためだ。
入力した需要量や単価はどこかに送信される?
送信されない。年間需要量・発注費用・品目単価・在庫維持費率・日別需要の標準偏差を含むすべての入力は、ブラウザの中だけで計算している。サーバーへ送ることも保存することもなく、結果のコピー機能も端末のクリップボードに書き込むだけだ。仕入価格や年間使用量は取引条件そのもので、社外のフォームに打ち込みにくい情報だという前提で作ってある。ページを離れれば入力内容は残らない。逆に保存もされないので、繰り返し使う品目は結果をコピーして手元に残しておくとよい。
まとめ
年間需要量・発注費用・単価・在庫維持費率を入れれば EOQ と年間総コストが出て、日別需要の標準偏差とサービス率を足せば安全在庫と発注点までが同じ画面で繋がる。方式を切り替えれば、安全在庫の √ の中身が変わることも数字で追える。いつからか続いている発注ロットに、根拠を与えるところから始めてほしい。
工程と工程のあいだで作業量が均されているかを見たいときは タクトタイム&ラインバランシング計算 を、出来上がった製品の寸法ばらつきが規格に収まるかを見たいときは 工程能力指数 Cp/Cpk 計算 を使ってほしい。
計算の解釈で分からないところや、こういう入力が欲しいという要望があれば お問い合わせページ から教えてほしい。
Mahiro
Mahiro Appの開発者。在庫管理の現場で「なぜこの発注ロットなのか」に答えられないまま数字が引き継がれていくのを何度も見てきたので、EOQ から安全在庫・発注点までを1本の計算として繋いだ。
運営者情報を見る