社畜ゲートウェイ

京成・京急を中心に取り上げる阪急ファンのブログです。日本一遅い速報を届けます。

MENU

【スポンサーリンク】

【VB.NET】While文による繰り返し(While ~ End While)

【スポンサーリンク】

f:id:neko_britannia:20200615213413j:plain

VB.NETでは繰り返し文が複数用意されています。

色々あって「使い方がわからん!」と思う方が多いかもしれませんが、落ち着いて考えれば「なるほど」と思えます。今回は「While 条件式 ~ End While」の使い方を解説します。

While 条件式 ~ End While の基本構文

MSDNを見てみると、「指定された条件が True である限り、一連のステートメントを実行します。」というとてもシンプルな解説です。確かにそうなのですが、もう少しだけ丁寧に説明すると、以下の意味になります。

While 条件式
  繰り返す処理
End While

条件式の部分ですが、例えば、「a = b」の判定がTrueの時、Whileの中に入り、繰り返したい処理を実行します。この「a = b」がTrueの間はずっとWhileの中の繰り返したい処理を実行します。極論を言えば、以下の様にすれば無限ループとなります。

While 1 = 1
  繰り返す処理
End While

もし間違ってデバッグで上記を実行した場合は強制終了して下さい。exeで実行したらメモリがパンクしてやがて落ちますが、タスクマネージャーから強制終了するなどして止めて下さい。そうしないと止まりません。無限ループなので。

 

使い方例

ではサンプルです。こんなフォームを作ってみました。

f:id:neko_britannia:20200703213233j:plain

開始値と終了値を入力し、実行ボタンを押すと、結果のテキストボックスに値が入ります。開始値に入れた値が終了値まで増えるという、何の役にも立たない検証用のフォームです。

Private Sub cmdWhileLoop_Click(sender As Object, e As EventArgs) Handles cmdDoWhileLoop.Click
    Try

        'テキストボックスに入力された値をInteger型の変数に代入
        Dim intStartValue As Integer = Integer.Parse(txtStartValue.Text)
        Dim intEndValue As Integer = Integer.Parse(txtEndValue.Text)

        '開始値が終了値と同じ値になるまで繰り返し
        While intStartValue < intEndValue
            intStartValue = intStartValue + 1
        End While

        MessageBox.Show(intStartValue, "結果", MessageBoxButtons.OK, MessageBoxIcon.Information)

        txtResult.Text = intStartValue

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

で、今回のテーマであるWhile文ですが、条件式の部分が「intStartValue < intEndValue」となっており、ループ処理では、入力値であるintStartValueが1ずつ増えていきます。1ループするごとに1増えて行き、終了値と同じ値になったらループを抜けます。

        While intStartValue < intEndValue
            intStartValue = intStartValue + 1
        End While

この部分ですね。とりあえず実行してみましょう。

f:id:neko_britannia:20200703214147j:plain

開始値に1、終了値に5を入れて、実行ボタンを押下してみます。

f:id:neko_britannia:20200703214231j:plain

はい、終了値まで到達しました。最後に結果のテキストボックスに入れておしまいです。

f:id:neko_britannia:20200703214310j:plain

Whileの動きを1週ずつ見ていくと、以下の様になります。

【開始前】

 開始値:1、終了値:5

 

【1週目】

 intStartValue:1

 intEndValue:5

 intStartValue < intEndValue なのでWhileの中に入る

 intStartValue を1増やす

【2週目】

 intStartValue:2

 intEndValue:5

 intStartValue < intEndValue なのでWhileの中に入る

 intStartValue を1増やす

【3週目】

 intStartValue:3

 intEndValue:5

 intStartValue < intEndValue なのでWhileの中に入る

 intStartValue を1増やす

【4週目】

 intStartValue:4

 intEndValue:5

 intStartValue < intEndValue なのでWhileの中に入る

 intStartValue を1増やす

【5週目】

 intStartValue:5

 intEndValue:5

 intStartValue = intEndValue なのでWhileの中に入らない

5週目に到達した時に、intStartValue = intEndValueとなったので、Whileの中の処理を実行せず、Whileによる繰り返しを終了しています。

 

オマケ:事前チェック入れてみる

ここはオマケなのですが、今回、サンプルで作成したフォームにチェック処理を入れてません。未入力や文字列を入れたら落ちます。なので、チェック処理を入れると以下のソースとなります。

Private Sub cmdWhileLoop_Click(sender As Object, e As EventArgs) Handles cmdDoWhileLoop.Click
    Try

        '事前チェック
        If String.IsNullOrEmpty(txtStartValue.Text) = True Then
            MessageBox.Show("開始値を入力してください!", "入力チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Try
        ElseIf String.IsNullOrEmpty(txtEndValue.Text) = True Then
            MessageBox.Show("終了値を入力してください!", "入力チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Try
        End If

        If IsNumeric(txtStartValue.Text) = False Then
            MessageBox.Show("開始値には数字を入力してください!", "入力チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Try
        ElseIf IsNumeric(txtEndValue.Text) = False Then
            MessageBox.Show("終了値には数字を入力してください!", "入力チェック", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Try
        End If

        'テキストボックスに入力された値をInteger型の変数に代入
        Dim intStartValue As Integer = Integer.Parse(txtStartValue.Text)
        Dim intEndValue As Integer = Integer.Parse(txtEndValue.Text)

        '開始値が終了値と同じ値になるまで繰り返し
        While intStartValue < intEndValue
            intStartValue = intStartValue + 1
        End While

        MessageBox.Show(intStartValue, "結果", MessageBoxButtons.OK, MessageBoxIcon.Information)

        txtResult.Text = intStartValue

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

事前チェックに2種類のチェックを入れています。未入力チェックと入力値の数値チェックです。

 

編集後記

While文による繰り返しは、For文と同じくらい基本の繰り返し処理なので、確実にマスターしておきましょう。条件式の意味さえ押さえてしまえば簡単です。

関連記事

未入力チェックで使用した「IsNullOrEmptyメソッド」を取り上げた記事です。

www.stellacreate.com

参考サイト

While...End While ステートメント

docs.microsoft.com