xellstorm
JA
アプリを開く

Excelでモンテカルロシミュレーション:アドインあり・なしの3つの方法

ガイド · 2026年10月更新

Excelモデルでモンテカルロシミュレーションを実行する方法は3つあります。RAND()の数式とデータテーブルを使う方法、アドインを使う方法、Excelの外でモデルを実行するツールを使う方法です。いずれも、不確かな入力を範囲から引いてモデルを何千回も再計算し、結果を確率として読み取ります。予算を超える確率、80%の信頼水準で下回るコスト、最も影響の大きい入力がわかります。

1つの数値ではなくシミュレーションを使う理由

スプレッドシートは、入力の組1つに答えを1つ返します。入力が見積もりだと、その答えはどこまでずれうるかを隠し、しかもたいていは楽観的です。最も可能性の高いコストを足し合わせても、コストは下回るより超過しやすいという事実が反映されないためです。当サイトのプロジェクトコストの例題では、最も可能性の高いコストの合計である基準見積もりを、シミュレーション結果の94.2%が上回ります。最良・基準・最悪の3ケースを並べても解決しません。答えが3つ出るだけで、それぞれの起こりやすさはわからないからです。

1. Excelのみ、アドインなし:RAND()とデータテーブル

Excelにシミュレーションのコマンドはありませんが、関数だけで小さなモデルなら足ります。

  1. 不確かな入力を、それぞれ乱数に置き換えます。RAND()は0〜1の一様乱数を返します。逆分布関数で、それを目的の範囲の値に変換します(数式は下の表)。
  2. 計算を繰り返します。1列に試行番号1〜5,000を入れ、その右の列の、最初の番号より1行上のセルに出力セルへの参照を入れます。その行から下の2列を選び、「データ」›「What-If分析」›「データテーブル」(英語版:Data › What-If Analysis › Data Table)を選んで、「列の入力セル」には同じシートの空いているセルを指定します。行ごとにモデルが再計算されるので、行ごとに新しい乱数が引かれます。
  3. 列を集計します。AVERAGE、PERCENTILE.INC、COUNTIF(試行回数で割る)で、平均、P80、目標を超える確率を求めます。分布の形はヒストグラムで確かめます。
Excelの数式による乱数
入力数式
正規分布(平均、標準偏差)=NORM.INV(RAND(), mean, sd)
PERT(最小、最頻、最大)=BETA.INV(RAND(), 1+4*(ml-min)/(max-min), 1+4*(max-ml)/(max-min), min, max)
三角分布(最小、最頻、最大)。乱数はUに入れる=IF(U<(ml-min)/(max-min), min+SQRT(U*(max-min)*(ml-min)), max-SQRT((1-U)*(max-min)*(max-ml)))
リスクイベント(確率p、コストc)=IF(RAND()<p, c, 0)

この方法でも動きますし、学ぶにも向いています。ただ、実際のモデルでは限界が見えてきます。

2. Excelアドイン

@RISK、Crystal Ball、Analytic Solver、ModelRiskなどのアドインは、Excelに分布関数(たとえばセルに入力するPERT関数)を加え、試行を実行し、グラフ、感度分析、レポートを作成します。Excelの中で動くため、ユーザーごとにExcelとアドインのインストールが必要で、多くの会社ではIT部門への申請が要ります。

3. Excelの外でモデルを実行するツール

3つ目は、独自の計算エンジンを持ち、.xlsxファイルを読み込んで試行を自分で実行するツールです。xellstormはこの方式で、ブラウザー上で動きます。

3つの方法の比較

ExcelのみExcelアドインxellstorm
インストール不要Excelにアドインを導入不要:ブラウザー上で動作
分布数式で自作多数(関数として)48種類(独自のテーブルを含む)
試行の繰り返しデータテーブル(モデル全体を再計算)組み込み組み込み。ほとんどのファイルで、変わる部分だけを再計算
次回も同じ数値不可(値として貼り付けない限り)固定シードなら可シードがあれば、CPUコア数に関係なく可
相関、感度、レポート自作の数式とグラフ組み込み組み込み

結果の読み方

平均
シミュレーション結果すべての平均。入力が偏っていると、最も可能性の高い入力から求めた結果とは異なります。
パーセンタイル(P10、P50、P80、P90)
結果の10%、50%、80%、90%がその値以下に収まる値。P50は中央値で、P80とP90は予算によく使われる水準です(Pレベルの詳細)。
目標の確率
条件を満たす結果の割合。たとえば、総コストが予算を超える場合です。
S字カーブ
結果ごとの累積確率を描いた曲線。どのパーセンタイルも、ある値を下回る確率も読み取れます。
トルネード図
各入力を低いパーセンタイルから高いパーセンタイルまで動かしたとき(ほかは中央値に固定)、結果がどれだけ動くかを示します。棒が最も長い入力が、最も影響の大きい入力です(トルネード図)。
CVaR(最悪5%の平均)
最悪5%の結果の平均。悪いケースが起きる頻度だけでなく、どれほど悪いかを示します(最悪側から予備費の規模を決める)。

試行は何回必要?

報告する数値が動かなくなる程度です。シミュレーションで求めた平均のサンプリングノイズは、試行回数の平方根に反比例して小さくなり、試行回数を4倍にすると半分になります。まずは数千回が一般的で、P95のような裾のパーセンタイルには、平均より多くの試行が必要です。xellstormは、平均とパーセンタイルが選んだ許容誤差内に収まるまで実行できます。

よくある質問

モンテカルロシミュレーションはシナリオ分析と同じですか?

いいえ。シナリオ分析は、最良・基準・最悪のように選んだ少数のケースを計算するだけで、それぞれの起こりやすさはわかりません。シミュレーションは、範囲から何千もの組み合わせを引き、各結果の起こりやすさを示します。

見積もりには、どの分布を使えばよいですか?

最小・最頻・最大で示す専門家の見積もりには、PERT分布か三角分布。ゼロを下回らず、右に長い裾を持つ量には、対数正規分布。起きるか起きないかのイベントには、確率と、発生時のコスト。データがあれば、それに分布を当てはめます。

Excelファイルを書き換える必要はありますか?

xellstormでは不要です。分布はExcelファイルの中ではなく外に保存され、「最小 / 最頻 / 最大」の列のように、すでにあるセルから数値を読み取れます。数式は書いたままです。Excelのみやアドインの場合、範囲は数式やアドイン独自の定義として、ファイル自体に保存されます。

ExcelでPERT分布を作るには?

ExcelにPERT関数はありませんが、PERT分布は最小から最大の範囲に合わせて伸縮したベータ分布なので、BETA.INVで乱数を引けます。=BETA.INV(RAND(), 1+4*(ml-min)/(max-min), 1+4*(max-ml)/(max-min), min, max)のように書き、最小、最頻(ml)、最大はセル参照に置き換えます。平均は(最小 + 4 × 最頻 + 最大)/ 6です。ExcelでのPERT分布では、三角分布と比べています。

アドインなしで、Excelでモンテカルロシミュレーションはできますか?

はい。不確かな入力を=NORM.INV(RAND(), mean, sd)のような数式で引き、データテーブルでモデルを繰り返し、AVERAGE、PERCENTILE.INC、COUNTIFで結果を集計します。あるいは、Excelファイルをxellstormで開いてください。ブラウザー上で試行を実行するので、アドインもExcelも不要です。

関連ページ

xellstormは、Excelモデル向けのブラウザー型モンテカルロシミュレーションツールです。アドインは不要で、Excelファイルがパソコンの外に出ることはありません。