どうもExcelマクロではポアソン分布に従う乱数を一行で書くのは無理らしい。正規分布やガンマ分布などの乱数は一行で書けるのだが。

そこでガンマ分布の逆関数を使ってポアソン分布に従う乱数を作成してみた。
(実際にはガンマ分布でα=1とした指数分布を使う)

ポアソン分布の数式は

P(α)=λαeλα!P(α)=λαeλα!

P(α)=λ


λ=1.2としたとき、ポアソン分布の事象発生回数αを出力するコードは
Dim alpha As Integer
Dim lambda, temp As Double

lambda = 1.2
alpha = 0
temp = WorksheetFunction.GammaInv(Rnd(), 1, 1 / lambda)

Do While temp < 1
temp = WorksheetFunction.GammaInv(Rnd(), 1, 1 / lambda) + temp
alpha = alpha + 1
Loop

これを使ったモンテカルロシミュレーションでヒストグラムを描くとn=300のとき

ポアソン分布(n=300)

n=5000のとき
ポアソン分布(n=5000)


理論値と一致することを確認できた。

数式の理論的な意味はこのサイトにある。