Excelでモンテカルロシミュレーションを初心者向けに解説

Excelでモンテカルロシミュレーションを初心者向けに解説 IT
  1. 1章:モンテカルロシミュレーションとは?Excelでできること・できないこと
  2. 2章:準備編|必要な関数(RAND/RANDBETWEEN/NORM.INV)とシート設計の基本
    1. まず必須:RAND(0〜1の乱数)
    2. 整数がほしい:RANDBETWEEN(範囲内の整数)
    3. 最重要:NORM.INV(正規分布っぽい値を作る)
    4. 迷子にならないシート設計:入力・乱数・結果を分ける
  3. 3章:実践編|「売上×コスト」など身近な例で1回分の試行を作る(モデル化の考え方)
    1. ステップ1:ブレる要素(不確実)と固定の要素(確実)を分ける
    2. ステップ2:パラメータ表を作り、1回分の入力(サンプル)を生成する
    3. ステップ3:「売上→コスト→利益」を1本の流れで計算する
  4. 4章:反復編|試行回数を増やして分布を見る(データテーブル/手動計算/集計のコツ)
    1. 方法1:データテーブル(一番ラク、ただし重くなりがち)
    2. 方法2:手動計算(固めたいときに強い)
    3. 方法3:シンプルに「行コピー」で増やす(軽量・分かりやすい)
    4. 集計のコツ:まず「利益の列」だけを完成させる
  5. 5章:分析編|結果の読み方(平均・中央値・パーセンタイル・損失確率)と意思決定への落とし込み
    1. まず押さえる4点セット:平均・中央値・パーセンタイル・赤字確率
    2. 「損失の大きさ」も見たいなら:損失の期待値(条件付き平均)
    3. 意思決定への落とし込みは「一言テンプレ」を作る
    4. 対策に繋げる:指標を“目標”に変換する

1章:モンテカルロシミュレーションとは?Excelでできること・できないこと

モンテカルロシミュレーションは、「確率でブレる要素」を何度も試行して、結果の分布(起こりやすさ)をつかむ手法です。たとえば売上は毎月だいたい読めても、実際は「客数が多い月/少ない月」「単価が上振れ/下振れ」などで変動しますよね。そこで、客数や単価を“確率的に揺らしながら”1万回など大量に計算し、利益がどのくらいの範囲に収まるか、赤字になる確率は何%か――を数字で見える化します。

ポイントは、1回の予測(点)ではなく、起こりうる未来の“幅”(分布)を見ること。20代の会社員だと、こんな場面で効きます。

  • 見積もりや売上計画の「ブレ」を上司に説明したい
  • 新施策の期待値だけでなく「失敗確率」を把握したい
  • 在庫・人員・広告費など、外したときのリスクを数値化したい

そしてExcelは、モンテカルロの入口としてかなり優秀です。理由はシンプルで、乱数(ランダム)と関数、集計、グラフが一通り揃っているから。難しいコードを書かずに、次の流れをシート上で再現できます。

  1. 不確実な入力(例:客数、単価、原価率)を乱数で発生させる
  2. その入力から利益などの結果を計算する
  3. それを何百〜何万回繰り返す
  4. 平均、中央値、パーセンタイル、赤字確率…を集計して判断する

一方で「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ブロック構成です。

  1. パラメータ(固定値):平均、標準偏差、下限・上限、比率などを置く
  2. 乱数・サンプル生成:RANDやNORM.INVで「1回分の入力値」を作る
  3. 計算モデル(結果):売上、コスト、利益などを算出する

実務的には、シート上部か別シートに「パラメータ表」を作り、セル参照で式を組むのが強いです。たとえば、

  • 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の「データテーブル」は、同じ計算をまとめて反復させる定番機能です。乱数モデルとの相性もよく、最初はこれが手堅いです。

  1. 結果として見たいセル(例:利益セル)を決める
  2. 別エリアに試行回数分の行を用意(例:A10:A1009に1〜1000と入力)
  3. その表の左上(例:B9)に、利益セルへの参照(例:=利益セル)を置く
  4. 表全体を選択 → データタブ → What-If分析データ テーブル
  5. 「列入力セル」か「行入力セル」に、モデル内の“使っていないダミーセル”を指定(例:空いているセル)

これで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。モンテカルロは「未来を当てる」道具ではなく、どこをいじれば勝ちやすくなるかを見つける道具です。

コメント

NewsTowerをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む