LoginSignup
0
0

More than 3 years have passed since last update.

プログラミング初学者がVBAを少し触ったので中身をバラバラに分解してみた。

Posted at

1~10までのランダムな数値を被り無しでセルに入力する。

今回はVBAのみを使い処理を行う方法です。
VBとVBAは違うもののようです。
VBを引っ張ってこればRandomクラスを読み込みそれをセルに入力する方法もあるようです。

将来VBAを使うことがあることを信じて備忘録的な

今回はこのコードを分解していきます。

Sub メソッド名()
    Dim 変数1, 変数2 As データ型名
    Dim 変数3(1 To 10) As データ型名
    Randomize

    For 変数1 = 1 To 10

        Do
        変数2 = Int(Rnd() * 10 + 1)
        Loop Until 変数3(変数2) = 0

    Cells(変数1 + 1, 列) = 変数2
    変数3(変数2) = 1
    Next 変数1
End

解説

Sub メソッド名()

メソッド名を定義

Dim 変数1,  変数2 As データ型名

今回は下の方で変数に数字を格納する為Int型を指定する。指定しないとVariant型になる(Variant型はなんでも入るやつ)

Dim 変数3(1 To 10) As データ型名

これで、1〜10の数値を格納する変数を作る。
数字の1〜10以外は入れれません。

Randomize

次回実行時のRnd()のシード値の変更

For 変数1 = 1 To 10

繰り返しをする処理を指定、
今回は変数1が1〜10になるまで繰り返す。

    Do  (小ループ開始文)

      変数2 = Int(Rnd() * 10 + 1)

Int()は関数で小数点以下を切り捨てるものですFix()を使ってもいいかもしれません。Int()が切り上げFix()で切り捨てと言った感じです。
変数2(1~10と0の内どれかの数値)

    Loop Until 変数3(変数2) = 0

Loop Until でループの終了条件を指定、この時変数3には1〜10の数値がランダムに格納されていく
変数3(2, 4, 3, 1, 7, 5, 6, 10, 8, 9)
次回大ループ実行時は終了条件=0となっている為小ループは実行されない。0が入ってないと終わる。

    Cells(変数1 + 1, 列) = 変数2

Cell()で入力するセルの位置を指定、
変数1の部分は行数の指定で1〜10の値が入るので繰り返しの度+1で1行ずつ下へ入力セルを移動させている処理で、
変数3の中身をセルに代入している。

    変数3(変数2) = 1

処理が終わった部分に1を代入する処理
変数3(1, 1, 1, 1, 7, 5, 6, 10, 8, 9)
↑変数3の中身(4回目まで処理が終わっている例)

Next 変数1

次の処理は変数1

End

終わり。

Tips.


データ型 String(文字列) Integer(数値) Date(日付) 等...

※VBAでは変数の宣言を強制することにより 変数名のミスによるエラーをわかるようにするオプションがある。オプションより設定可能

For のお決まり事

For 変数=初期値 To 最大値
    /繰り返し処理/
Next 変数

Rnd()

Rnd():これを実行することで0以上1未満の数値を返す。( 0.0 ~ 0.9 )

Rnd() * 10 :これで、0以上10未満にすることができる。( 0 , 0.1 = 1 , 0.9 = 9 )

Int(Rnd() * 10) + 1 :+1することで、1以上10以下にすることができる。

Randomize

マクロを実行するたびSub 変数()~Endまでが実行されるためRndで繰り返しをする前にRandmizeを実行することで前実行した時に使用したシード値(乱数を発生させるための引数またはパラメータのようなもの)と違うものを使うようにするもの。
- インストラクターのネタ帳(Randomizeステートメントとは?)
- Randomize ステートメント (VBA)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0