Running Monte Carlo Simulations in Financial Models

Tested prompts for monte carlo simulation in excel for finance compared across 5 leading AI models.

BEST BY JUDGE SCORE Claude Haiku 4.5 9/10

You need to model uncertainty in a financial forecast, and you've decided Excel is the tool. Maybe it's a DCF where revenue growth is really a range, not a point estimate. Maybe it's a retirement plan that has to survive sequence-of-returns risk. Maybe your CFO wants a probability that next year's EBITDA clears a covenant. A single-point forecast won't answer any of those questions. Monte Carlo simulation will.

The good news: you don't need @RISK, Crystal Ball, or Python to run thousands of scenarios. Native Excel handles it with RAND(), NORM.INV(), a Data Table, and a histogram. The trick is setting it up correctly so the distributions reflect real financial behavior (fat tails, correlation, bounded inputs) instead of naive normal assumptions that understate risk.

This page gives you the prompt to generate a working Monte Carlo model in Excel, four AI outputs compared side-by-side, and the context below to decide which approach fits your model, where simulation breaks down, and how to avoid the mistakes that make finance teams distrust the output.

When to use this

Use Monte Carlo in Excel when your model has multiple uncertain inputs that interact non-linearly, when stakeholders need a probability distribution rather than a base/bull/bear case, and when the stakes justify 30 minutes of setup. It shines for valuation, risk, and planning work where 'what's the chance' matters more than 'what's the number.'

  • DCF valuations where revenue growth, margin, and WACC each have a believable range
  • Retirement or endowment drawdown models exposed to sequence-of-returns risk
  • VaR and capital-at-risk estimates for a portfolio or trading book
  • Project finance and capex decisions with uncertain demand, price, and cost inputs
  • Covenant, liquidity, or cash-runway stress tests where you need P(breach) not just a number

When this format breaks down

  • Deterministic models with one or two knowns, like a fixed-rate loan amortization, where simulation adds noise not insight
  • Problems that need hundreds of thousands of iterations or correlated multi-asset paths. Excel gets slow past ~10,000 trials and Python/R is the right tool
  • Situations where you don't have defensible distributions for the inputs. Garbage distributions in, confident-looking garbage out
  • Audited regulatory models where reviewers require reproducible seeds and version control that Excel handles poorly

The prompt we tested

You are a quantitative finance analyst who builds Monte Carlo simulations in Microsoft Excel. A user will describe a financial modeling scenario, and your job is to produce a clear, step-by-step guide for building a Monte Carlo simulation in Excel tailored to their situation.

Follow these instructions exactly:
Structure the response with these sections: (1) Model Setup (inputs, assumptions, distributions to use like NORM.INV(RAND(),mean,stdev) or LOGNORM.INV), (2) Simulation Build (step-by-step cell-by-cell instructions with exact Excel formulas), (3) Running Iterations (using Data Tables with a dummy input, or 1000+ row approach), and (4) Analyzing Results (percentiles via PERCENTILE.INC, histogram, VaR, probability of outcomes). Use concrete cell references (e.g., B2, C5:C1004), include every formula verbatim in backticks, and keep the total response under 600 words.

User's scenario:
I'm valuing a startup and want to run a Monte Carlo simulation on a 5-year DCF. Revenue growth is uncertain (mean 25%, stdev 10%), EBITDA margin is uncertain (mean 20%, stdev 5%), and the discount rate could range from 10-15%. I want to see the distribution of enterprise values and the probability the valuation exceeds $50M.

Produce the Excel-based Monte Carlo simulation guide now.

Model comparison

ModelQualityCostLatencyTokens
Claude Opus 4.7 9 $0.1327 22.7s 503 / 1669
Claude Haiku 4.5 9 $0.0066 9.9s 335 / 1252
GPT-5.4Not run yet
Gemini 2.5 Pro 8 $0.0030 15.9s 317 / 516
Grok 4.1 Fast Reasoning 9 $0.0004 26.8s 441 / 655

Outputs

Claude Opus 4.7 9/10
# Monte Carlo DCF Valuation in Excel

## 1. Model Setup

**Inputs (Sheet1, cells B2:B7):**
- B2: Base Revenue (Year 0), e.g., `10000000`
- B3: Revenue Growth Mean = `0.25`
- B4: Revenue Growth StDev = `0.10`
- B5: EBITDA Margin Mean = `0.20`
- B6: EBITDA Margin StDev = `0.05`
- B7: Terminal Growth = `0.03`

**Discount Rate:** Uniform distribution between 10%–15% via `=0.10+RAND()*0.05`

**Revenue Growth & Margin:** Normal distributions via `NORM.INV(RAND(), mean, stdev)`

**Assumption:** Free Cash Flow ≈ EBITDA (simplified; ignore taxes/capex for clarity or subtract a fixed %).

## 2. Simulation Build (single-iteration row)

Build one trial in row 10 (columns D–N):

- **D10 (Discount Rate):** `=0.10+RAND()*0.05`
- **E10 (Margin draw):** `=NORM.INV(RAND(),$B$5,$B$6)`
- **F10:J10 (Growth Y1–Y5):** `=NORM.INV(RAND(),$B$3,$B$4)` (copy across)
- **K10 (Revenue Y1):** `=$B$2*(1+F10)`
- **L10 (Revenue Y2):** `=K10*(1+G10)` → drag through **O10 (Revenue Y5)**
- **P10 (Terminal Value):** `=O10*$E$10*(1+$B$7)/(D10-$B$7)`
- **Q10 (Enterprise Value):**
`=K10*$E$10/(1+D10)^1+L10*$E$10/(1+D10)^2+M10*$E$10/(1+D10)^3+N10*$E$10/(1+D10)^4+O10*$E$10/(1+D10)^5+P10/(1+D10)^5`

Q10 is your simulated Enterprise Value for one trial.

## 3. Running Iterations (1000+ row approach)

Simplest method: copy row 10 down to row 1009.

- Select D10:Q10, then fill down to row 1009. Each row recalculates with fresh `RAND()` draws.
- Press **F9** to regenerate all 1,000 scenarios.
- To freeze results: copy Q10:Q1009 → Paste Special → Values into column S.

*(Alternative: Data Table method — put `=Q10` in T1, create a 1-column data table T2:T1001 with any empty cell as the column input. Excel reruns the model for each row.)*

## 4. Analyzing Results

Using **Q10:Q1009** as your EV distribution:

**Summary statistics (cells T2:T8):**
- Mean: `=AVERAGE(Q10:Q1009)`
- Median: `=MEDIAN(Q10:Q1009)`
- StDev: `=STDEV.S(Q10:Q1009)`
- Min: `=MIN(Q10:Q1009)`
- Max: `=MAX(Q10:Q1009)`

**Percentiles (T10:T14):**
- 5th (VaR95): `=PERCENTILE.INC(Q10:Q1009,0.05)`
- 25th: `=PERCENTILE.INC(Q10:Q1009,0.25)`
- 50th: `=PERCENTILE.INC(Q10:Q1009,0.50)`
- 75th: `=PERCENTILE.INC(Q10:Q1009,0.75)`
- 95th: `=PERCENTILE.INC(Q10:Q1009,0.95)`

**Probability EV > $50M:**
`=COUNTIF(Q10:Q1009,">50000000")/COUNT(Q10:Q1009)`

**Value at Risk (downside, 5%):**
`=AVERAGE(Q10:Q1009)-PERCENTILE.INC(Q10:Q1009,0.05)`

**Histogram:**
1. Create bin edges in column V (e.g., V2:V21 = $0, $10M, $20M … $200M).
2. In W2:W21 use: `=FREQUENCY(Q10:Q1009,V2:V21)` (array-enter with Ctrl+Shift+Enter, or in Excel 365 just Enter).
3. Select V2:W21 → Insert → Column Chart. This shows your EV distribution.

**Interpretation tips:**
- The spread (P95 – P5) quantifies valuation uncertainty.
- If P(EV > $50M) is, say, 68%, there's a 32% downside risk to that threshold.
- Re-run (F9) to confirm stability; if results vary materially, increase to 5,000–10,000 trials.
Judge notes: Flawless execution—comprehensive step-by-step guide with exact formulas, concrete cell references, proper distributions, all four required sections, and directly addresses the user's specific DCF valuation scenario with probability analysis; only minor: terminal value formula could clarify that the margin applies to terminal year EBITDA, and "ignore taxes/capex" caveat slightly weakens rigor, but these are negligible given the 600-word constraint and practical utility.
Claude Haiku 4.5 9/10
# Monte Carlo Simulation: Startup DCF Valuation

## 1. Model Setup

**Inputs & Assumptions:**
- Base Year 1 Revenue: $5M (cell B1)
- Revenue Growth: Normal distribution, mean 25%, stdev 10%
- EBITDA Margin: Normal distribution, mean 20%, stdev 5%
- Discount Rate: Uniform distribution, 10–15%
- Terminal Growth Rate: 3% (constant, cell B2)
- Tax Rate: 25% (constant, cell B3)

**Distributions:**
- Revenue Growth: `=NORM.INV(RAND(),0.25,0.10)`
- EBITDA Margin: `=NORM.INV(RAND(),0.20,0.05)`
- Discount Rate: `=RAND()*0.05+0.10`

---

## 2. Simulation Build

**Layout: Each row = one Monte Carlo iteration. Columns A–H = years 1–5 + DCF metrics.**

**Row 1 (Headers):**
- A1: `Iteration` | B1: `Year1_Rev` | C1: `Y2_Rev` | D1: `Y3_Rev` | E1: `Y4_Rev` | F1: `Y5_Rev` | G1: `Disc_Rate` | H1: `Enterprise_Value`

**Iteration Column (A2:A1001):**
- A2: `=ROW()-1` (copy down to A1001 for 1000 iterations)

**Discount Rate (G2, copy to G1001):**
- G2: `=RAND()*0.05+0.10`

**Revenue Build (B2:F2, copy down to row 1001):**
- B2: `=$B$1*(1+NORM.INV(RAND(),0.25,0.10))` (Year 1 revenue with growth)
- C2: `=B2*(1+NORM.INV(RAND(),0.25,0.10))` (Year 2, copy to D2:F2)

**EBITDA & Free Cash Flow (I2:M2, copy down):**
- I2 (Y1 EBITDA): `=B2*NORM.INV(RAND(),0.20,0.05)`
- J2 (Y2 EBITDA): `=C2*NORM.INV(RAND(),0.20,0.05)` (copy to K2:M2 for years 3–5)
- N2 (Y1 FCF): `=I2*(1-$B$3)` (after-tax EBITDA, copy to O2:R2)

**Terminal Value (S2, copy down):**
- S2: `=R2*(1+$B$2)/(G2-$B$2)` (Gordon Growth Model)

**PV of Cash Flows (T2:Y2, copy down):**
- T2: `=N2/(1+G2)^1` (PV Year 1 FCF)
- U2: `=O2/(1+G2)^2` (copy to V2:X2 for years 2–5)
- Y2: `=S2/(1+G2)^5` (PV of terminal value)

**Enterprise Value (H2, copy to H1001):**
- H2: `=SUM(T2:Y2)`

---

## 3. Running Iterations

**No Data Table needed.** The formulas above use `RAND()` and recalculate across 1000 rows automatically. Press **Ctrl+Shift+F9** to force recalculation and generate new random draws.

To preserve results, copy H2:H1001 and paste as values in a new column before recalculating.

---

## 4. Analyzing Results

**Summary Statistics (cells in column Z):**
- Z1: `Mean EV` → `=AVERAGE(H2:H1001)`
- Z2: `Median EV` → `=MEDIAN(H2:H1001)`
- Z3: `10th %ile` → `=PERCENTILE.INC(H2:H1001,0.10)`
- Z4: `90th %ile` → `=PERCENTILE.INC(H2:H1001,0.90)`
- Z5: `Probability > $50M` → `=COUNTIF(H2:H1001,">50")/1000`

**VaR (5th percentile, worst-case downside):**
- Z6: `=PERCENTILE.INC(H2:H1001,0.05)`

**Histogram:**
Create bins ($20M–$150M in 10M increments) and use `COUNTIFS()` to count results in each bin. Insert a column chart to visualize the distribution.

---

**Key Insight:** The probability cell (Z5) directly answers: "What % of simulations yield >$50M valuation?" Rerun (Ctrl+Shift+F9) multiple times; results should stabilize around the true probability.
Judge notes: Excellent response that directly addresses the query with concrete Excel formulas, clear cell-by-cell instructions, proper probability analysis, and all four required sections—minor deduction only for slight ambiguity in revenue growth formula interpretation (whether $B$1 should be base revenue or prior year).
Gemini 2.5 Pro 8/10
Of course. Here is a step-by-step guide to building the Monte Carlo DCF simulation for your startup valuation in Excel.

### 1. Model Setup

First, we will set up the core inputs and assumptions for the model.

*   In cell **B2**, enter the Year 0 Revenue: `10000000`
*   In cell **B3**, enter the Mean Revenue Growth: `0.25`
*   In cell **B4**, enter the Stdev for Revenue Growth: `0.10`
*   In cell **B5**, enter the Mean EBITDA Margin: `0.20`
*   In cell **B6**, enter the Stdev for EBITDA Margin: `0.05`
*   In cell **B7**, enter the Minimum Discount Rate: `0.10`
*   In cell **B8**, enter the Maximum Discount Rate: `0.15`
*   In cell **B9**, enter the Terminal Growth Rate: `0.03`
*   In cell **B10**, enter the Tax Rate: `0.25`

The stochastic variables will be modeled using these distributions:
*   **Revenue Growth & EBITDA Margin:** Normal Distribution (`NORM.INV(RAND(), mean, stdev)`)
*   **Discount Rate:** Uniform Distribution (`min + (max - min) * RAND()`)

### 2. Simulation Build

This section builds a single-trial DCF model that recalculates with every change in the sheet (e.g., pressing F9).

1.  **Generate Random Variables for One Trial:**
    *   In cell **D2** (Discount Rate for this trial), enter: `=B7+(B8-B7)*RAND()`
    *   In cells **D5:H5** (Annual Random Revenue Growths), enter this formula in **D5** and drag it across to **H5**: `=NORM.INV(RAND(),$B$3,$B$4)`
    *   In cells **D6:H6** (Annual Random EBITDA Margins), enter this formula in **D6** and drag it across to **H6**: `=NORM.INV(RAND(),$B$5,$B$6)`

2.  **Build the 5-Year DCF Forecast (Columns D-H for Years 1-5):
Judge notes: Excellent structure and formulas directly addressing the query with proper Excel syntax, clear step-by-step guidance, and concrete cell references; minor issue is the output appears truncated mid-section, cutting off the complete DCF build and results analysis portions.
Grok 4.1 Fast Reasoning 9/10
### 1. Model Setup
Inputs (A1:B8):  
A1: Initial Revenue ($M), B1: `10`  
A2: Growth Mean, B2: `0.25`  
A3: Growth Stdev, B3: `0.1`  
A4: Margin Mean, B4: `0.2`  
A5: Margin Stdev, B5: `0.05`  
A6: r Min, B6: `0.1`  
A7: r Max, B7: `0.15`  
A8: Terminal Growth, B8: `0.03`  

Assumptions: Constant g ~ NORM.INV(RAND(),0.25,0.1), m ~ NORM.INV(RAND(),0.2,0.05), r ~ uniform B6:B7 via B6+(B7-B6)*RAND(). Rev_t = B1*(1+g)^t; EBITDA_t = Rev_t * m; EV = Σ_{t=1-5} EBITDA_t/(1+r)^t + [EBITDA_5*(1+0.03)/(r-0.03)]/(1+r)^5.

### 2. Simulation Build
A12: `Iterations`  
A13: `1`; select A13:A1012, fill series (1-1000).  
B13: `=NORM.INV(RAND(),$B$2,$B$3)` (growth)  
C13: `=NORM.INV(RAND(),$B$4,$B$5)` (margin)  
D13: `=$B$6+($B$7-$B$6)*RAND()` (r)  
E13: `=$B$1*$C13*SUMPRODUCT((1+B13)^ROW(INDIRECT("1:5")),(1/(1+D13))^ROW(INDIRECT("1:5")))+$B$1*(1+B13)^5*$C13*(1+$B$8)/(D13-$B$8)/(1+D13)^5` (EV)

### 3. Running Iterations
Select A13:E13, copy/paste to E1012 (1000 rows). Press F9 to rerun sims.

### 4. Analyzing Results
F1: `Mean` F2: `=AVERAGE(E13:E1012)`  
F3: `P10` F4: `=PERCENTILE.INC(E13:E1012,0.1)`  
F5: `P90` F6: `=PERCENTILE.INC(E13:E1012,0.9)`  
F7: `Prob >$50M` F8: `=COUNTIF(E13:E1012,">50")/1000`  
F9: `95% VaR (P5)` F10: `=PERCENTILE.INC(E13:E1012,0.05)`  
Histogram: Data > Data Analysis > Histogram (Input: E13:E1012; Bin: G13:G23 = 0,10,...,100). Chart distribution.
Judge notes: Excellent response that directly addresses the query with a complete, practical Excel Monte Carlo framework including proper formulas, cell references, and all four required sections, with only minor room for improvement in terminal value calculation clarity.

What makes these work

  1. 01
    Use Data Tables, not VBA loops

    A one-variable Data Table pointed at an empty cell is the fastest native way to run thousands of trials. It recalculates the whole model per row and stores the output. VBA loops are 5-10x slower and harder to audit.

  2. 02
    Match distribution to the input

    Returns are roughly normal but with fat tails, so consider Student-t via T.INV. Prices and volumes are lognormal (always positive, skewed). Expert estimates fit triangular. Don't default everything to NORM.INV just because it's easy.

  3. 03
    Model correlation explicitly

    If equity and credit spreads move together, independent RAND() draws will understate risk. Use a Cholesky decomposition on a correlation matrix, or at minimum a single shared market factor that feeds correlated inputs.

  4. 04
    Freeze a seed for review

    RAND() recalculates on every keystroke. Before sending results, paste values on the trial outputs or use a seeded approach so reviewers see the same numbers you do. Otherwise your P90 shifts every time someone clicks a cell.

More example scenarios

#01 · DCF valuation with uncertain growth and margin
Input
Build a Monte Carlo in Excel for a 5-year DCF. Revenue growth is normally distributed mean 8% stdev 3%. EBITDA margin is triangular min 18% mode 22% max 25%. WACC is normal 9% stdev 1%. Terminal growth fixed 2.5%. Run 5,000 trials and output distribution of enterprise value.
Expected output
A workbook with an Assumptions tab using NORM.INV(RAND(), mu, sigma) for growth and WACC, a triangular inverse for margin, a DCF calc tab, and a Data Table driving 5,000 iterations of EV. Summary stats: mean EV $842M, P10 $611M, P50 $835M, P90 $1,094M, plus a histogram and cumulative probability chart.
#02 · Retirement withdrawal sustainability
Input
Client has $1.2M portfolio, 60/40 allocation, plans to withdraw $54k/year inflation-adjusted for 30 years. Equity returns 7% mean 16% stdev, bonds 3% mean 5% stdev, inflation 2.5% mean 1% stdev. Simulate 10,000 30-year paths. What's the probability of running out?
Expected output
Excel model with annual return draws per asset class, rebalancing logic, inflation-adjusted withdrawals, and a terminal-balance column. Results: 82% success rate, median ending balance $1.47M, 10th percentile $0 at year 23. Includes a chart of wealth paths and a failure-year histogram.
#03 · Project finance IRR distribution
Input
Solar project, $40M capex, 20-year life. Annual generation lognormal mean 72 GWh stdev 8 GWh. PPA price fixed years 1-10 at $52/MWh, then merchant price normal $45 stdev $12. OpEx $1.2M/year growing 2.5%. Simulate 5,000 IRR outcomes.
Expected output
Cash flow tab with stochastic generation and post-PPA price, IRR computed per trial via IRR() on the simulated cash flow column. Output: mean IRR 9.4%, P10 6.1%, P90 12.8%, probability IRR below 8% hurdle = 34%. Tornado chart shows merchant price is the dominant driver.
#04 · Covenant breach probability
Input
Company must maintain Debt/EBITDA below 4.0x. Forecast EBITDA $85M with stdev $18M (normal). Debt $310M with $25M amortization, new $40M draw possible with 40% probability. Simulate 10,000 year-end ratios and report breach probability.
Expected output
Model draws EBITDA and a Bernoulli for the revolver draw, computes ratio per trial. Result: mean ratio 3.44x, breach probability 21%, conditional on draw breach probability 38%. Includes a density plot with the 4.0x line marked.

Common mistakes to avoid

  • Assuming normality everywhere

    Financial returns have fat tails and skew. A pure normal model will systematically underestimate tail risk, which is exactly what the simulation is supposed to reveal. Use t-distributions or empirical resampling for return series.

  • Ignoring input correlation

    Simulating revenue growth and margin independently pretends they have no relationship, when in reality high growth often compresses margin. Independent draws produce a falsely narrow EV distribution and overconfident executives.

  • Too few iterations

    500 trials won't stabilize the P95 or P99. For tail statistics you need 5,000 to 10,000 minimum. Check convergence by running the simulation twice and comparing percentiles; if they drift more than 2%, run more.

  • Hardcoding the base case into the sim

    If your deterministic model has a hidden input that's also in the distribution list, you'll double-count or cancel it. Always route every stochastic input through one clearly labeled Assumptions block that both the base case and simulation reference.

  • Presenting only the mean

    The point of Monte Carlo is the distribution. Reporting just the average EV or IRR defeats the exercise. Always show P10/P50/P90, probability of hitting a threshold, and a histogram.

Related queries

Frequently asked questions

Do I need an add-in like @RISK or Crystal Ball?

No. Native Excel with RAND(), NORM.INV(), Data Tables, and basic statistical functions handles up to about 10,000 iterations comfortably. Add-ins help with distribution fitting, correlation matrices, and reporting, but they're a convenience, not a requirement for most finance use cases.

How many iterations should I run for a DCF Monte Carlo?

5,000 is a reasonable default for a valuation model. If you only care about the mean and median, 1,000 is enough. If you need stable P95 or P99 for risk reporting, push to 10,000 and verify convergence by running twice and comparing percentiles.

How do I simulate correlated inputs in Excel?

Build a correlation matrix, apply a Cholesky decomposition (you can do this with MMULT and a lower-triangular manual decomposition for small matrices), and multiply it by a vector of independent standard normal draws. For two or three correlated inputs, a simpler shared-factor approach usually works.

Why do my results change every time I click a cell?

RAND() and NORM.INV(RAND(),...) are volatile and recalculate on every action. After running the Data Table, copy the output column and Paste Special as Values to freeze the trial results before computing statistics or building charts.

Is Monte Carlo better than scenario analysis?

They answer different questions. Scenario analysis tells you the model output under three specific narratives. Monte Carlo tells you the probability distribution across thousands of combinations. Use scenarios for board communication, simulation for risk quantification, and ideally show both.

Can I use Monte Carlo for option pricing in Excel?

Yes, for European options it's straightforward: simulate terminal stock prices under geometric Brownian motion with NORM.INV(RAND()), compute payoff, average, and discount. For American or path-dependent options you need to simulate the full price path, which gets slow in Excel past a few thousand paths.