VBAのRndは精度悪いから使い物にならないぞ。
Sub test()
 Dim val As Double
 Dim count(31) As Double
 Dim r As Double
 
 Rnd -1
 Randomize 999
 
 Dim i As Long
 For i = 0 To 2 ^ 31 - 1
  r = Rnd()
  If r = 0 Then
   val = 31
  Else
   val = Fix(-Log(r) / Log(2))
  End If
  count(val) = count(val) + 1
 Next '最後オーバーフローでエラー
 Stop
End Sub