
毎週金曜日、プログラミングのちょっとした講座を記しています。
ここでは、小学校から「プログラミング」が必須項目になってしまったため、お父さん・お母さん・おじいちゃん・おねえちゃんが子供に「プログラミング」教えることができるように、ここでこっそりと勉強してしまおうという企画です。
今週は「処理の移動」と「繰り返し処理」を説明します。
まずはいつも使用しているプログラムを使って説明していきます。
このプログラムは「Hallo word!」と「Hallo japan!」を表示させるプログラムです。このプログラムで、「Hallo word!」を飛ばして、「Hallo japan!」を表示させるためにはどうしたら良いでしょうか?
の部分を消せば良いのですが、この部分も後から使うために、一時的に飛ばしたいといった場合はさてどうしましょう?
その場合「goto」という命令を使用します。使用方法は「goto ラベル」です。このラベルというのは飛ばしたい場所の頭に「ラベル」というものを付けます。ラベルの名前は何でも良いです。ラベルの書き方は「ラベル:」とラベルの後ろに半角の「:」を付けます。
つまり
となります。ラベルは「goto」の上でも下でも良いです。ラベルを付けることによって処理を上にも下にも移動できます。また、「goto」の命令に「On Error GoTo ラベル名」というのがあります。これはエラーが起こった場合にラベルに移動するという使い方になります。
例えば、一番最初のプログラムにエラーが起こった場合「エラー」と表示させる場合をご紹介します。
エラーの場合の処理のモジュール(部分)に「err01」というラベルを付けて次のようにします。
そして、エラーが起こった場合に表示させたいので「On Error GoTo」を組み込みますが、この場合はプログラムのどこでエラーが起きてもいいように、プログラムの一番最初に入れます。
これで一見良いように見えますが、このまま実行させると、プログラムは順番に処理しますので、エラーが起きていなくても「エラー」が表示されてしまいます。そこで、「err01」の前に処理を終了させる必要があります。その場合は「exit sub」という命令を使用します。これは「ここで強瀬的にプログラムを抜け出しますよ」という命令です。これを「err01」の前につけます。
となります。また、「exit sub」を使わない方法として、「exit sub」のところに「goto」文を入れて、「End Sub」に強制的に飛ばすという方法もあります。その場合は次の通りです。
これが処理の移動になります。
次に「繰り返し処理」を説明します。「繰り返し処理」はプログラムの中では「ループ」といった言葉で表現されることがあります。このループの方法は3つの方法があります。その方法は「条件が成立している間」と「条件が成立するまで」と「指定回数」という3つの方法があります。
まずは、「条件が成立している間」のループは「do while」という命令です。「Do While 条件」という使い方で、ループ間の最後に「Loop」を付けます。
このプログラムで、最初の3回は「Hallo word!」を表示させ、その後、「 Hallo japan!」を表示させる場合を考えてみましょう。
まずは、回数を数えなければならないので、カウントする変数をこれに挿入します。このカウントする変数を「cnt01」とします。「cnt01」はカウントするので「整数」で良いです。これを挿入します。
そして、「cnt01」に初期値を入れます。カウントは「1」から数えますので、「cnt01」に「1」を入れましょう。
次に、3回「Hallo word!」を表示させるためにループの命令を組み込みます。3回というのが4より小さい場合になりますので、次のようになります。
ここで実行してしまうと、実は大変なことになります。「cnt01」の値が変わることがないので、ループの中をぐるぐる回り続け、ループから抜け出せなくなります。これを「無限ループ」と呼びます。ループの処理で一番怖いのがこの「無限ループ」です。今回は分かりやすい状態ですが、プログラムが複雑になると、意図もしない無限ループが発生してしまう場合があります。この場合強制的にプログラムを終了させるにはCtrl + Breakキーを押すと終了します。
このループの中で、「cnt01」でカウントしなければならないので、「cnt01」の値をひとつ増やさなければなりません。その場合は、「cnt01 = cnt01 + 1」といった小技を使います。これをループに組み込みます。つまり、
となります。
次に「条件が成立するまで」と「指定回数」を説明したいと思いましたが、ちょっと長くなりそうなので、次の週で説明します。ではまた来週
Sub 表示1()dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02End Sub
このプログラムは「Hallo word!」と「Hallo japan!」を表示させるプログラムです。このプログラムで、「Hallo word!」を飛ばして、「Hallo japan!」を表示させるためにはどうしたら良いでしょうか?
dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01
の部分を消せば良いのですが、この部分も後から使うために、一時的に飛ばしたいといった場合はさてどうしましょう?
その場合「goto」という命令を使用します。使用方法は「goto ラベル」です。このラベルというのは飛ばしたい場所の頭に「ラベル」というものを付けます。ラベルの名前は何でも良いです。ラベルの書き方は「ラベル:」とラベルの後ろに半角の「:」を付けます。
つまり
goto Label1label1:
ということになります。これを使って上記のプログラムから先ほどの場所を飛ばしてみましょう。
Sub 表示1()dim moi01 as stringgoto label1moji01 = "Hallo word!"MsgBox moji01label1:dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02End Sub
となります。ラベルは「goto」の上でも下でも良いです。ラベルを付けることによって処理を上にも下にも移動できます。また、「goto」の命令に「On Error GoTo ラベル名」というのがあります。これはエラーが起こった場合にラベルに移動するという使い方になります。
例えば、一番最初のプログラムにエラーが起こった場合「エラー」と表示させる場合をご紹介します。
エラーの場合の処理のモジュール(部分)に「err01」というラベルを付けて次のようにします。
err01:dim moi03 as stringmoji03 = "エラー"MsgBox moji03
これをプログラムに組み込みます。
Sub 表示1()dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02err01:dim moi03 as stringmoji03 = "エラー"MsgBox moji03End Sub
そして、エラーが起こった場合に表示させたいので「On Error GoTo」を組み込みますが、この場合はプログラムのどこでエラーが起きてもいいように、プログラムの一番最初に入れます。
Sub 表示1()On Error GoTo err01dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02err01:dim moi03 as stringmoji03 = "エラー"MsgBox moji03End Sub
これで一見良いように見えますが、このまま実行させると、プログラムは順番に処理しますので、エラーが起きていなくても「エラー」が表示されてしまいます。そこで、「err01」の前に処理を終了させる必要があります。その場合は「exit sub」という命令を使用します。これは「ここで強瀬的にプログラムを抜け出しますよ」という命令です。これを「err01」の前につけます。
Sub 表示1()On Error GoTo err01dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02exit suberr01:dim moi03 as stringmoji03 = "エラー"MsgBox moji03End Sub
となります。また、「exit sub」を使わない方法として、「exit sub」のところに「goto」文を入れて、「End Sub」に強制的に飛ばすという方法もあります。その場合は次の通りです。
On Error GoTo err01dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02goto label02err01:dim moi03 as stringmoji03 = "エラー"MsgBox moji03label02:End Sub
これが処理の移動になります。
次に「繰り返し処理」を説明します。「繰り返し処理」はプログラムの中では「ループ」といった言葉で表現されることがあります。このループの方法は3つの方法があります。その方法は「条件が成立している間」と「条件が成立するまで」と「指定回数」という3つの方法があります。
まずは、「条件が成立している間」のループは「do while」という命令です。「Do While 条件」という使い方で、ループ間の最後に「Loop」を付けます。
Sub 表示1()dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02End Sub
このプログラムで、最初の3回は「Hallo word!」を表示させ、その後、「 Hallo japan!」を表示させる場合を考えてみましょう。
まずは、回数を数えなければならないので、カウントする変数をこれに挿入します。このカウントする変数を「cnt01」とします。「cnt01」はカウントするので「整数」で良いです。これを挿入します。
Sub 表示1()dim cnt01 as integerdim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02End Sub
そして、「cnt01」に初期値を入れます。カウントは「1」から数えますので、「cnt01」に「1」を入れましょう。
Sub 表示1()dim cnt01 as integercnt01 = 1dim moi01 as stringmoji01 = "Hallo word!"MsgBox moji01dim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02End Sub
次に、3回「Hallo word!」を表示させるためにループの命令を組み込みます。3回というのが4より小さい場合になりますので、次のようになります。
Sub 表示1()dim cnt01 as integercnt01 = 1dim moi01 as stringmoji01 = "Hallo word!"do while cnt01 < 4MsgBox moji01loopdim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02End Sub
ここで実行してしまうと、実は大変なことになります。「cnt01」の値が変わることがないので、ループの中をぐるぐる回り続け、ループから抜け出せなくなります。これを「無限ループ」と呼びます。ループの処理で一番怖いのがこの「無限ループ」です。今回は分かりやすい状態ですが、プログラムが複雑になると、意図もしない無限ループが発生してしまう場合があります。この場合強制的にプログラムを終了させるにはCtrl + Breakキーを押すと終了します。
このループの中で、「cnt01」でカウントしなければならないので、「cnt01」の値をひとつ増やさなければなりません。その場合は、「cnt01 = cnt01 + 1」といった小技を使います。これをループに組み込みます。つまり、
Sub 表示1()dim cnt01 as integercnt01 = 1dim moi01 as stringmoji01 = "Hallo word!"do while cnt01 < 4MsgBox moji01cnt01 = cnt01 + 1loopdim moi02 as stringmoji02 = "Hallo japan!"MsgBox moji02End Sub
となります。
次に「条件が成立するまで」と「指定回数」を説明したいと思いましたが、ちょっと長くなりそうなので、次の週で説明します。ではまた来週
コメント