1章:モンテカルロシミュレーションとは?Excelでできること・できないこと
モンテカルロシミュレーションは、「確率でブレる要素」を何度も試行して、結果の分布(起こりやすさ)をつかむ手法です。たとえば売上は毎月だいたい読めても、実際は「客数が多い月/少ない月」「単価が上振れ/下振れ」などで変動しますよね。そこで、客数や単価を“確率的に揺らしながら”1万回など大量に計算し、利益がどのくらいの範囲に収まるか、赤字になる確率は何%か――を数字で見える化します。
ポイントは、1回の予測(点)ではなく、起こりうる未来の“幅”(分布)を見ること。20代の会社員だと、こんな場面で効きます。
- 見積もりや売上計画の「ブレ」を上司に説明したい
- 新施策の期待値だけでなく「失敗確率」を把握したい
- 在庫・人員・広告費など、外したときのリスクを数値化したい
そしてExcelは、モンテカルロの入口としてかなり優秀です。理由はシンプルで、乱数(ランダム)と関数、集計、グラフが一通り揃っているから。難しいコードを書かずに、次の流れをシート上で再現できます。
- 不確実な入力(例:客数、単価、原価率)を乱数で発生させる
- その入力から利益などの結果を計算する
- それを何百〜何万回繰り返す
- 平均、中央値、パーセンタイル、赤字確率…を集計して判断する
一方で「Excelでできないこと」も押さえると、途中で詰まりにくいです。
- 超大規模(何十万〜何百万試行)だと重くなりがち
- 複雑な依存関係(例:客数が増えると単価が下がる等)を作り込むと設計が難しい
- 乱数は便利だが、毎回値が変わるので「同じ結果を再現」するには工夫が必要
とはいえ、初心者がまず狙うべきゴールは「完璧な統計モデル」ではなく、意思決定に使える視界を手に入れることです。たとえば、
「平均利益は+50万円。ただし下位10%では−20万円。赤字確率は15%」
ここまで出せるだけで、会話の質が一気に上がります。上司への報告も「たぶん大丈夫です」ではなく、「この条件なら赤字は15%で、対策するならここがボトルネックです」と言える。
次章では、そのための土台として、Excelで乱数を作るRAND / RANDBETWEEN / NORM.INVなどの必須関数と、迷子にならないシート設計の基本を整えます。
2章:準備編|必要な関数(RAND/RANDBETWEEN/NORM.INV)とシート設計の基本
ここからはExcelでモンテカルロを回すための「道具」と「設計」を整えます。コツはシンプルで、①乱数を作る → ②現実っぽい値に変換する → ③計算モデルに流し込むの順番にすること。式を思いつきで散らすと、後で修正が地獄になります。
まず必須:RAND(0〜1の乱数)
=RAND()は、0以上1未満の一様乱数を返します。モンテカルロではこの「0〜1」を起点に、さまざまな分布に変換します。
- 例:0〜100の範囲にしたい →
=RAND()*100 - 例:下限20、上限50にしたい →
=20+RAND()*(50-20)
注意点は、シートが再計算されるたびに値が変わること。後の章で「固定する」方法も触れますが、まずは“変わるもの”として扱えばOKです。
整数がほしい:RANDBETWEEN(範囲内の整数)
=RANDBETWEEN(最小, 最大)は、指定範囲の整数を返します。たとえば「来店客数は整数で扱いたい」なら便利。
- 例:1日の客数が80〜120 →
=RANDBETWEEN(80,120)
ただし、現実のブレは「端っこが同じ確率」で起きるとは限りません。“だいたい平均付近が多い”なら、次の正規分布を使うほうが自然です。
最重要:NORM.INV(正規分布っぽい値を作る)
「平均はだいたいこのくらい、でもブレる」という変数(売上単価、原価率、工数など)は正規分布で近似できることが多いです。そこで使うのがNORM.INV。
=NORM.INV(確率, 平均, 標準偏差)(※Excel日本語環境でも関数名は同じ)
RANDで作った0〜1の確率を、平均と標準偏差を持つ“それっぽい値”に変換します。
- 例:単価が平均3,000円、標準偏差300円 →
=NORM.INV(RAND(),3000,300)
これで「上下に揺れつつ、平均付近が出やすい」乱数になります。なお、正規分布はまれに極端な値が出ます。単価がマイナスになる等が心配なら、下限・上限で丸める設計を入れます(例:=MAX(0, NORM.INV(...)))。
迷子にならないシート設計:入力・乱数・結果を分ける
初心者がつまずく原因の多くは、数式がどこに何の意図で置かれているか分からなくなること。おすすめは次の3ブロック構成です。
- パラメータ(固定値):平均、標準偏差、下限・上限、比率などを置く
- 乱数・サンプル生成:RANDやNORM.INVで「1回分の入力値」を作る
- 計算モデル(結果):売上、コスト、利益などを算出する
実務的には、シート上部か別シートに「パラメータ表」を作り、セル参照で式を組むのが強いです。たとえば、
- B2:単価の平均、C2:単価の標準偏差
- 単価(サンプル)セル:
=NORM.INV(RAND(),$B$2,$C$2)
こうしておくと、条件変更(平均を上げる、ブレを小さくする)が表の数字を変えるだけで済みます。
準備はこれでOKです。次章では、この土台の上に「売上×コスト」など身近な題材で、1回分の試行(1シミュレーション)をきれいに作るところまで進めます。
3章:実践編|「売上×コスト」など身近な例で1回分の試行を作る(モデル化の考え方)
モンテカルロで最初に作るべきものは、いきなり「1万回の試行」ではなく、1回分の試行がきれいに回る計算モデルです。ここがグチャると、反復させた瞬間に「どの前提で何を計算してるんだっけ?」となります。
題材はシンプルに、月次の利益をこう置きます。
利益 = 売上 − コスト
さらに分解して、
- 売上 = 客数 × 単価
- コスト = 固定費 +(変動費率 × 売上)
「売上×コスト」というより、実務で使いやすい売上とコストの“構造”を先に決めるイメージです。ここまで決めれば、あとは「ブレる要素」を乱数で揺らすだけ。
ステップ1:ブレる要素(不確実)と固定の要素(確実)を分ける
実務で効くコツは、全部をランダムにしないこと。まずは不確実な変数を2〜3個に絞るほうが、原因分析もしやすいです。
例として次の3つだけを揺らします。
- 客数:ある程度ブレる(整数)
- 単価:平均の周りにブレる(正規分布っぽく)
- 変動費率:原価率や外注比率が少し揺れる(正規分布っぽく)
固定の要素は、まずは固定で置きます。
- 固定費:家賃・人件費など(月120万円、など)
ステップ2:パラメータ表を作り、1回分の入力(サンプル)を生成する
2章の設計どおり、上部にパラメータを置いて参照します(数字は例)。
| 項目 | 値 | メモ |
|---|---|---|
| 客数 最小 | 400 | 月の下限 |
| 客数 最大 | 700 | 月の上限 |
| 単価 平均 | 3000 | 円 |
| 単価 標準偏差 | 300 | 円 |
| 変動費率 平均 | 0.55 | 55% |
| 変動費率 標準偏差 | 0.03 | 3% |
| 固定費 | 1200000 | 円 |
次に「サンプル生成」ブロックで、1回分の入力値を作ります。
- 客数(整数):
=RANDBETWEEN(客数最小, 客数最大) - 単価:
=NORM.INV(RAND(), 単価平均, 単価標準偏差) - 変動費率:
=NORM.INV(RAND(), 変動費率平均, 変動費率標準偏差)
ここで大事なのが現実的な範囲に“丸める”こと。たとえば変動費率が0.9(90%)やマイナスになると利益計算が壊れます。最低限、上限下限を入れておくと安全です。
例:変動費率を0〜1に収める
=MIN(1, MAX(0, NORM.INV(RAND(), 変動費率平均, 変動費率標準偏差)))
単価もマイナス回避だけなら、
=MAX(0, NORM.INV(RAND(), 単価平均, 単価標準偏差))
ステップ3:「売上→コスト→利益」を1本の流れで計算する
あとは計算モデルに流し込みます。セルの考え方は以下でOK。
- 売上:
=客数セル * 単価セル - 変動費:
=売上セル * 変動費率セル - 総コスト:
=固定費 + 変動費 - 利益:
=売上セル - 総コストセル
この時点で、シートを再計算するたびに客数・単価・変動費率が変わり、利益も動くはずです。つまり、「1回分の試行」=「1回の未来」を作れた状態。
モデル化の考え方としては、「式を頑張る」よりも構造を決めて、どこが揺れて、何が結果かを明確にするのが勝ち筋です。次章では、この1回分の試行を横に(または下に)増やして、試行回数を何百・何千と回し、分布として眺められる形にしていきます。
4章:反復編|試行回数を増やして分布を見る(データテーブル/手動計算/集計のコツ)
3章で作った「1回分の試行」は、いわば未来を1枚だけ描いた状態です。モンテカルロの本番はここからで、同じモデルを何百〜何万回まわして「利益がどの範囲に集まりやすいか」「赤字が何%あるか」を分布で見るのが目的になります。
Excelで反復するやり方は大きく3つ。自分のPCの重さ(会社PCあるある)に合わせて選ぶのがコツです。
方法1:データテーブル(一番ラク、ただし重くなりがち)
Excelの「データテーブル」は、同じ計算をまとめて反復させる定番機能です。乱数モデルとの相性もよく、最初はこれが手堅いです。
- 結果として見たいセル(例:利益セル)を決める
- 別エリアに試行回数分の行を用意(例:A10:A1009に1〜1000と入力)
- その表の左上(例:B9)に、利益セルへの参照(例:
=利益セル)を置く - 表全体を選択 → データタブ → What-If分析 → データ テーブル
- 「列入力セル」か「行入力セル」に、モデル内の“使っていないダミーセル”を指定(例:空いているセル)
これでB10:B1009に試行ごとの利益がズラッと溜まります。ポイントは「入力セルに意味はない」こと。データテーブルを動かすトリガーとして置くだけです。
注意:データテーブルは再計算が増えるので、試行回数をいきなり1万にすると重くなります。まずは500〜2000回くらいから始めるのが現実的です。
方法2:手動計算(固めたいときに強い)
乱数は再計算で結果が変わるので、「この結果で報告資料を作りたい」という場面では困ります。そこでおすすめなのが手動計算運用です。
- 数式タブ → 計算方法の設定 → 手動
- 更新したいタイミングだけ
F9(再計算)
これなら、ある条件で回した結果を見ながら、必要なときだけ次の試行群に更新できます。さらに結果を固定したいなら、利益一覧をコピーして値貼り付け(貼り付けオプション:値)でスナップショット化しておくのが鉄板です。
方法3:シンプルに「行コピー」で増やす(軽量・分かりやすい)
データテーブルが重い/社内Excelで制限があるなら、モデルを1行分作って下にコピーする方法もアリです。ただしその場合、各行にRANDが埋め込まれて数式が大量になるので、試行数は数千程度で様子見が無難です。
集計のコツ:まず「利益の列」だけを完成させる
反復の目的は、途中変数を眺めることではなく最終アウトプット(例:利益)の分布を作ること。まずは「試行番号」と「利益」だけの2列に絞ると破綻しません。
- 利益のヒストグラム(度数分布)は、範囲(ビン)を作って
COUNTIFSで数えてもいいし、Excelのグラフ機能でもOK - 試行数が増えるほど滑らかになりますが、実務では1000〜5000回でも意思決定には十分なことが多い
ここまでできれば、あなたの手元には「利益が1回ではなく、1000回分ある」状態が作れています。次章ではその一覧から、平均・中央値・パーセンタイル・赤字確率を出し、上司が判断できる言葉に変換するところまで落とし込みます。
5章:分析編|結果の読み方(平均・中央値・パーセンタイル・損失確率)と意思決定への落とし込み
4章までで「利益が1000回分ある列」ができました。ここからが一番おいしいところで、その列を“意思決定に使える指標”に翻訳します。やることは難しくなく、見るべき指標を固定すればOKです。
まず押さえる4点セット:平均・中央値・パーセンタイル・赤字確率
- 平均(期待値):長期的に見た「だいたいこのくらい儲かる」
=AVERAGE(利益範囲) - 中央値(典型値):極端な当たり外れに引っ張られにくい「真ん中」
=MEDIAN(利益範囲) - パーセンタイル(下振れ幅):ワースト側の“覚悟”を数値化
例:下位10%(P10)→=PERCENTILE.INC(利益範囲,0.1)
例:下位5%(P5)→=PERCENTILE.INC(利益範囲,0.05) - 赤字確率(損失確率):利益<0 の割合。上司が一番気にするやつ
=COUNTIF(利益範囲,"<0")/COUNT(利益範囲)
ここでのコツは、平均だけで判断しないこと。平均がプラスでも、P10(下位10%)が大きくマイナスなら「運が悪い月に耐えられない」可能性があります。逆に平均はそこそこでも、赤字確率が低いなら“堅い施策”と言えます。
「損失の大きさ」も見たいなら:損失の期待値(条件付き平均)
赤字確率が分かると、次は「赤字になったとき、どれくらい痛い?」が気になります。利益<0 のときだけ平均を取るなら、Excel 365以降はAVERAGEIFでいけます。
=AVERAGEIF(利益範囲,"<0")
これで、赤字時の平均損失が取れます(マイナス値として出ます)。「赤字確率10%で、赤字時は平均−30万円」みたいに言えると、リスクが急に現実的になります。
意思決定への落とし込みは「一言テンプレ」を作る
分析は、最後に報告用の日本語にして初めて価値が出ます。おすすめは次のテンプレで、数字を差し替えるだけにすること。
- 期待値:平均利益は○万円
- 現実ライン:典型(中央値)は○万円
- 下振れ耐性:下位10%(P10)でも○万円(or −○万円)
- 失敗確率:赤字確率は○%
たとえばこんな形です。
「平均は+50万円だが、下位10%では−20万円。赤字確率は15%。赤字月の平均損失は−35万円」
この一文が言えると、上司との会話が「気合い」から「条件と対策」に変わります。
対策に繋げる:指標を“目標”に変換する
最後に、指標をアクションへ落とすコツ。おすすめは赤字確率(またはP10)を安全基準に置くことです。
- 例:赤字確率を5%以下にしたい → 価格(単価平均)を上げる/固定費を下げる/変動費率のブレを抑える
- 例:P10を0以上にしたい(下位10%でも赤字にしない)→ 固定費の見直し・最低客数の底上げ施策が効く
Excel上では、パラメータ表(単価平均、固定費、変動費率平均など)を少し変えて再計算し、赤字確率とP10がどう動くかを見ればOK。モンテカルロは「未来を当てる」道具ではなく、どこをいじれば勝ちやすくなるかを見つける道具です。


コメント