VBAでステートメントをランダム化する
VBA Randomizeステートメントは、RND関数を適用する前に追加する単純なワンライナーステートメントです。ブックが再度開かれるたびに、Randomizeステートメントは、コンピューターのシステム時間に応じて、RND関数に新しいシード番号を提供します。
Randomizeステートメントについて説明する前に、VBAを使用した簡単なRND関数を紹介します。
ワークシート関数「RAND」として、VBAでも「RND」は0より大きく1より小さい乱数を生成します。
次に、「RND」関数の構文を見てみましょう。
[数]: 3つの方法で引数を渡すことができます。
- 数値を<0として渡すと、毎回同じ乱数が生成され続けます。
- 番号を0として渡すと、指定した最新の番号が繰り返されます。
- > 0の数を渡すと、異なる乱数、つまりシーケンス内の次の乱数が与えられ続けます。
例
例については、以下のコードを見てください。
コード:
Sub RND_Example()Debug.Print Rnd End Sub
即時ウィンドウでコードを実行すると、以下の番号が表示されます。
同様に、このコードをさらに3回実行すると、以下の数値が表示されます。
次に、ブックを閉じて再度開きます。
次に、Visual BasicEditorウィンドウに戻ります。
これで、直接のウィンドウは空できれいになりました。
ここでも、コードを4回実行して、即時ウィンドウに表示される数値を確認します。
上記と同じ番号を取得しました。
これは乱数のようには見えません。ファイルを再度開くたびに、最初から同じ番号が取得される傾向があるためです。
では、ブックが再開されたかどうかに関係なく、どのようにして乱数を生成するのでしょうか。
「Randomize」ステートメントを使用する必要があります。
VBAランダム化ステートメントの使用方法は?
このVBARandomize Excelテンプレートはここからダウンロードできます– VBA RandomizeExcelテンプレート例1
乱数を取得するには、RND関数の前に単純なワンライナー「Randomize」を追加するだけです。
コード:
Sub Randomize_1()Randomize Debug.Print Rnd End Sub
次に、コードを4回実行して、何が得られるかを確認します。
ローカルウィンドウに上記の数値が生成されました。
次に、ファイルを閉じて、もう一度ファイルを開きます。
いつものように、VisualBasicウィンドウの白紙の状態から始めます。
ここで、もう一度コードを実行して、今回取得する数値を確認します。
ワオ!!!今回は違う数字が出ました。
RND関数の前にRandomizeステートメントを追加したため、ファイルを再度開くたびに異なる乱数が取得されます。
これは乱数のようですね。
例2
1より大きい乱数
これまで見てきたように、「RND」関数は0から1までの数値しか生成できません。ただし、複数の乱数を生成するには、ワークシート関数クラスで使用できる「RANDOMBETWEEN」を使用する必要があります。
したがって、1より大きい乱数を生成するには、以下のコードを使用する必要があります。
コード:
Sub Randomize_2()Randomize Debug.Print Rnd * 100 End Sub
次に、コードを実行して、何が得られるかを確認します。
このように、VBAの「Randomize」ステートメントを使用して、Excelファイルを再度開くたびに乱数を生成できます。