前回までに「nextGeneration」という世代を1つ進めるサブプロシージャを作成しました。今度はこれを繰り返して実行し、何世代も観察できるようにしましょう。関数名はrepeatNextGenerationということにしましょうか。いじりやすいように前回書いたプロシージャに上に、行を追加して書きたしましょう。プロシージャの中で、別のサブプロシージャを呼び出す場合は「Call プロシージャ名」と書くだけです。そこまで分かれば、鋭い方は、すぐに書けてしまうのでは、ないでしょうか。
Dim i As Long
Dim frequency As Long
frequency = 10
For i = 1 to frequency
Call nextGeneration
Next
End Sub
こんな感じで。
でも、これでは、10回繰り返すことはできますが、15回や20回繰り返すためには何度も書き直さなければなりません。これでは使い勝手が悪いです。そのため今回は「引数(ひきすう)」というものを使います。これは外部からCallで呼び出す際に値を指定して呼び出すことができるものです。具体的には上のコードの中で、定義しているfrequencyを一行目の「repeatNextGeneration()」のカッコの中に書くだけです。実際に書くと、下のようになります。(「Dim」は不要)
Dim i As Long
For i = 1 to frequency
Call nextGeneration
Next
End Sub
さて、ではこれを実行してみましょう。
が、しかし、今度は引数があるせいで「F5」で簡単に実行することができません。これを実行するために、新たにサブプロシージャを作る必要があります。
今書いたサブプロシージャ「repeatNextGeneration」よりもさらに上に「testExecute」というサブプロシージャを作成し、適当な回数を指定して、「repeatNextGeneration」呼び出しましょう。
Call repeatNextGeneration(20)
End Sub
この「testExecute」をF5で実行してみましょう。VBEの画面
VBEの画面を小さくして、後ろにエクセルの画面が見えるようにしてから、F5で実行してみてください。すると、とんでもない問題があることに気付くハズですw
速っ!!!
これでは、観察もクソもないwww
好みの問題なので、好きに設定してもらえば良いのですが、とりあえずは0.5秒にしておきましょうか。この場合は単純に一行「Application.Wait [Now() + “0:00:00.5”]」と追加するだけです。簡単ですね。これで本当に完成です。
Public Sub testExecute()
Call repeatNextGeneration(20)
End Sub
Public Sub repeatNextGeneration(frequency As Long)
Dim i As Long
For i = 1 to frequency
Call nextGeneration
Application.Wait [Now() + “0:00:00.5”]
Next
End Sub
さて、次回はこれをもっと使いやすくするためにフォームを作成しようと思っています。これが完成すれば本当に完成となります。結構長かったですね(^^;