Excel VBA: 指定した行、列内のテーブルのセルに乱数を格納

excel_vba_random_cells
今回のネタは乱数でサンプルデータを生成したいときなどに使えますかね。

ソースコード

Sub randloop()
    Randomize ' シードの設定(引数省略でシステムタイマーの値)
    Const GYO_S As Integer = 1 ' 開始行
    Const RETSU_S As Integer = 1 ' 開始列
    Const GYO_E As Integer = 10 ' 終了行
    Const RETSU_E As Integer = 5 ' 終了列
    Const UPPER As Integer = 100 ' 乱数の最大値
    Const LOWER As Integer = 0 ' 乱数の最小値
    ' 指定された行、列のテーブル内のセルに乱数を格納
    For i = GYO_S To GYO_E
        For j = RETSU_S To RETSU_E
            ' Rndは[0, 1)の範囲の値を返す
            Cells(i, j).Value = Int((UPPER - LOWER + 1) * Rnd + LOWER)
        Next j
    Next i
End Sub

実行結果は上図のように0~100の範囲の乱数(今回は整数)が格納されます。
上記のコードの要の式は

(upper - lower + 1) * Rnd + lower

です。簡単に意味を説明しますと括弧内の+1はRndの戻り値の範囲が1未満の為の補正で、式の最後の+lowerはRndの戻りが0の場合の補正、と捉えます。

参考サイト

  • VBA World : 乱数の発生(関数:Rnd) その1

コメント

  1. 愛宕翔太 より:

    Excel VBA: 指定した行、列内のテーブルのセルに乱数を格納 http://www.yukun.info/blog/2009/06/excel-vba-random-rnd-cells.html