<p>After reading this question I got curious and found the paper
"<a href="https://arxiv.org/abs/1503.08376" rel="nofollow noreferrer">Assessing Excel VBA Suitability for Monte Carlo Simulation</a>" by Alexei Botchkarev that is available <a href="http://epublications.bond.edu.au/cgi/viewcontent.cgi?article=1179&amp;context=ejsie" rel="nofollow noreferrer">here</a>. Both RAND and RND functions are not recommended, but as pointed out in the paper the Mersenne Twister has been implemented in VBA by Jerry Wang.</p>

<p>A quick search led me to this nicely commented Version that has been updated the last 2015/2/28: <a href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/BASIC/MTwister.xlsb" rel="nofollow noreferrer">http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/BASIC/MTwister.xlsb</a></p>

<p>Source: <a href="http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/BASIC/basic.html" rel="nofollow noreferrer">http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/BASIC/basic.html</a></p>
Is Excel VBA's Rnd() really this bad?
<p>I need a pseudo random number generator for 2D Monte Carlo simulation that doesn't have the characteristic hyperplanes that you get with simple LCGs. I tested the random number generator Rnd() in Excel 2013 using the following code (takes about 5 secs to run):</p>

<pre><code>Sub ZoomRNG()

Randomize
For i = 1 To 1000
    Found = False
    Do
        x = Rnd()   ' 2 random numbers between 0.0 and 1.0
        y = Rnd()
        If ((x &gt; 0.5) And (x &lt; 0.51)) Then
            If ((y &gt; 0.5) And (y &lt; 0.51)) Then
                ' Write if both x &amp; y in a narrow range
                Cells(i, 1) = i
                Cells(i, 2) = x
                Cells(i, 3) = y
                Found = True
            End If
        End If
    Loop While (Not Found)
Next i

End Sub
</code></pre>

<p>Here is a simple plot of x vs y from running the above code</p>

<p><a href="https://i.stack.imgur.com/GdEQj.png" rel="noreferrer"><img src="https://i.stack.imgur.com/GdEQj.png" alt="enter image description here"></a></p>

<p>Not only is it not very random-looking, it has more obvious hyperplanes than the infamous RANDU algorithm does in 2D. Basically, am I using the function incorrectly or is the Rnd() function in VBA actually not the least bit usable? </p>

<p>For comparison, here's what I get for the Mersenne Twister MT19937 in C++. </p>

<p><a href="https://i.stack.imgur.com/WmCUB.png" rel="noreferrer"><img src="https://i.stack.imgur.com/WmCUB.png" alt="enter image description here"></a></p>