第6講 配列
第3話 乱数系列を変えるシード値を現時刻から取得
70 53 57 28 30 77 1 76 81 70
を実現するプログラム例
Module Module1

  Sub Main() '私は社長だ。
    f()
  End Sub

  Sub f()
    Dim a(9) As Integer '配列aの宣言
    Dim i As Integer
    For i = 0 To 9
      a(i) = Int(Rnd() * 100)
    Next
    For i = 0 To 9
      Console.Write("{0:d} ", a(i))
    Next
    Console.WriteLine()
  End Sub

End Module


皆さん、乱数のはずなのに、
何回実行しても実行画面は
70 53 57 28 30 77 1 76 81 70
とまったく同じです。
乱数(正確には疑似乱数)といえど、でる順番は決まっているのです。
順番を変えるには、シード値を指定します。
シード値とは乱数系列を決定する値です。
乱数系列を変えるときに使います。
具体的には、
    Randomize(*)
*に数字を入れます。
では、コードを
Module Module1

  Sub Main() '私は社長だ。
    
Randomize (0) 'シード値を指定
    f()
  End Sub

  Sub f()
    Dim a(9) As Integer '配列aの宣言
    Dim i As Integer
    For i = 0 To 9
      a(i) = Int(Rnd() * 100)
    Next
    For i = 0 To 9
      Console.Write("{0:d} ", a(i))
    Next
    Console.WriteLine()
  End Sub

End Module
と変更しましょう。
すると、実行結果は
76 35 10 70 4 53 72 61 24 40
と前と変わります。
では皆さんシード値をいろいろ変えて実験してみて下さい。
結果の一部は30行下に示します。

































シード値と結果(左がシード値で、右が結果)

指定なし 70 53 57 28 30 77 1 76 81 70
76 35 10 70 4 53 72 61 24 40
1 76 10 61 93 10 10 76 26 5 74
1 60 35 95 29 78 97 86 49 65
13 85 72 46 89 62 58 66 22 11

では、毎回自動的に乱数系列を変える方法はあるでしょうか。
あります。乱数系列のシード値を時間から取得するのです。
Module Module1

  Sub Main() '私は社長だ。
    
Rnd(-1)
    Randomize(
Timer())
    f()
  End Sub

  Sub f()
    Dim a(9) As Integer '配列aの宣言
    Dim i As Integer
    For i = 0 To 9
      a(i) = Int(Rnd() * 100)
    Next
    For i = 0 To 9
      Console.Write("{0:d} ", a(i))
    Next
    Console.WriteLine()
  End Sub

End Module

とすればよいのです。
これ以降では乱数を使うときには、原則としてピンクを入れることにします。

初心者の方は、乱数系列を決定するシード値を現時刻から取得するには
    Rnd(-1)
    Randomize(Timer())
とするものだ、と思って下さい。
お呪いであると思って下さい。
一気にすべてを理解しようとする姿勢は禁物です。
ただ、1行目は今回はなくても良いのですが、
For文などの繰り返し処理で、
乱数系列を変えるときには入れないとだめなので、
セットにして入れるようにしましょう。

配列は
    Dim a(2, 3) As Integr '2次元配列の宣言
とすると、2次元配列となります。
2次元という意味は、
a(0, 0),a(0, 1),a(0, 2),a(0, 3),
a(1, 0),a(1, 1),a(1, 2),a(1, 3),
a(2, 0),a(2, 1),a(2, 2),a(2, 3)
と縦と横を持つ配列になるからです。
3行4列配列と呼びます。
では、この2次元配列を使用して、
059
を実現しましょう。
条件は、2次元for文で実行することとデータは100未満のランダムな整数とします。
また、実行画面をそろえるために
    Rnd(-1)
    Randomize(Timer())
を一時的に外しておいて下さい。
一時的に外すよい方法は、
    
'Rnd(-1)
    
'Randomize(Timer())
と注釈文にしてしまうという方法です。
さらに、VBには数十行に渡って注釈文にしたり、
戻したりする方法も用意されています。
051
注釈文にするには、ドラッグによって対称行を選択状態にして、赤をクリック!
'を外すには、ドラッグによって対称行を選択状態にして、緑をクリック!

第2話へ   第4話へ

002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ