A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
← All posts
May 16, 2026 · Kyle Gwinnuptutorial

Monte Carlo: one column per variable

Build a sales-pipeline simulation by putting each uncertain input in its own column, combining them with a spill formula, and reading the answers off as ordinary cell formulas.

A Monte Carlo model in TukeySheets is a sheet of columns. Each uncertain input gets a column of draws from the SAMPLE.* family. One spill-vector combines those columns into a column of results. Summary stats sit in cells next to the model and recompute whenever an input changes.

TukeySheets sheet with four SAMPLE.* input columns, a Revenue spill column, summary stats, and a histogram titled "simulated months of revenue".

The rest of this post builds a sales-pipeline simulation and shows each piece.

Each input is a column

I want a distribution of monthly revenue from a four-stage funnel: leads in, demos booked, deals closed, dollars per deal. Four uncertain inputs, four columns, ten thousand draws each:

A3:  =SAMPLE.POISSON(80, 10000)             leads per month
B3:  =SAMPLE.BETA(8, 12, 10000)             lead → demo rate (~40%)
C3:  =SAMPLE.BETA(3, 7, 10000)              demo → close rate (~30%)
D3:  =SAMPLE.LOGNORMAL(9.5, 0.6, 10000)     deal size, in dollars

The distribution choice tracks the shape of each input. Lead counts are integer arrivals, so Poisson. Rates live in [0, 1], so Beta. Deal sizes are positive and skewed, so Lognormal. Each anchor cell shows a resample button; clicking it redraws that column alone.

The result is a spill-vector

Revenue per simulated month is the row-wise product of A, B, C, and D:

E3:  =A:A * B:B * C:C * D:D

One formula spills ten thousand rows. When A through D change — by edit or by resample — E recomputes.

Analysis is ordinary formulas

Once the result is a column, every question about it is a cell formula:

G3:  =AVERAGE(E:E)                          expected revenue
G4:  =PERCENTILE(E:E, 0.05)                 5th percentile
G5:  =PERCENTILE(E:E, 0.95)                 95th percentile
G6:  =COUNTIF(E:E, ">100000") / 10000       P(revenue > $100k)

A histogram on E shows the shape. Edit SAMPLE.BETA(3, 7, ...) to SAMPLE.BETA(4, 6, ...) and every cell above, plus the chart, recomputes. Click the resample button on D to isolate the deal-size noise: D redraws, E follows, G3:G6 update.

One trade-off

SAMPLE.* owns its cell. It anchors a column; it does not return a value to a containing formula. =SUM(SAMPLE.NORMAL(0, 1, 100)) will not work.

That is the cost. The benefit is that every variable in the model lives in its own column, visible, labeled, charted, and individually resampleable. The model is the sheet.

Deterministic sweeps with SEQ

For sensitivity rather than randomness, SEQ spills the same shape without the random part:

=SEQ.LINEAR(0, 1, 101)              101 evenly spaced values from 0 to 1
=SEQ.STEPS(0, 100, 5)               0, 5, 10, …, 100

No resample button — the values are deterministic. I use these to sweep one input across a range while holding the rest fixed.

The family

Continuous: Normal, t, χ², F, Beta, Gamma, Lognormal, Exponential, Uniform, Weibull, Cauchy. Discrete: Poisson, Binomial, NegativeBinomial, Geometric.