記事内に広告が含まれています。

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

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

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

【スポンサーリンク】

Do While 条件式 Loop

MSDNを見てみると、「Do While 条件式 Loopなんてページ無いじゃん!」と思いますが、Do…Loop ステートメントが見にくい、いえ、見るのには高度な理解力を要求されるため、パッと見て直ぐに理解は難しいと思います。

Do...Loop ステートメント - Visual Basic
詳細情報: Do...Loop ステートメント (Visual Basic)

で、何を書いているかと言うと、「Boolean 条件が True の場合、または条件が True になるまで、ステートメントのブロックを繰り返します。」と書いています。シンプルですね。以上。

はい、これだけでは分かりませんので、もう少しだけ丁寧に説明すると、以下の意味になります。

Do While 条件式
  繰り返す処理
Loop

条件式の部分がTrueの場合、ループの中に記載した処理、つまり繰り返したい処理が実行されます。1週するごとに条件式を判定して、Trueであれば繰り返すという仕組みです。例えば、条件式が「a = c」という式で、aの値も、cの値も「1」だとすると、Do Whileの中に入ります。

尚、無限ループを作りたい場合は以下の様にすれば作れますが、基本的にはやらないでください。

Do While 1 = 1
  繰り返す処理
Loop

もし間違ってデバッグで上記を実行した場合は強制終了、exeで無限ループが発生した場合はタスクマネージャーから強制終了するなどして止めて下さい(というか無限ループはやらないでね)。

【スポンサーリンク】

使い方例

Do While ~ Loop の実行確認をするために、サンプルのフォームを作ってみました。

f:id:neko_britannia:20200703213233j:plain

開始値と終了値を入力し、実行ボタンを押すと、終了値までに1つずつ値を増やしていき、増えていった分だけ文字列を結合するという検証用のフォームです。例えば、

  • 開始値:1
  • 終了値:5

という場合、実行ボタンを押すと、結果が12345になります。ソースは以下。

Private Sub cmdDoWhileLoop_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)
        Dim strResult As String = Nothing

        '開始値が終了値と同じ値になるまで繰り返し
        Do While intStartValue <= intEndValue
            strResult = strResult & intStartValue.ToString
            intStartValue = intStartValue + 1
        Loop

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

        txtResult.Text = strResult

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

Do While ~ Loop の部分です。開始値が終了値と同じになるまでループを繰り返します。

'開始値が終了値と同じ値になるまで繰り返し
Do While intStartValue <= intEndValue
    strResult = strResult & intStartValue.ToString
    intStartValue = intStartValue + 1
Loop

ループ内の処理は「文字列の結合」と「intStartValueの加算」です。実行してみましょう。

f:id:neko_britannia:20200703214147j:plain

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

f:id:neko_britannia:20200704201601j:plain

はい、1から5の数字が連続して出てきていますね。最後に、結果テキストボックスに入っていればOKです。

f:id:neko_britannia:20200704201701j:plain

Do While ~ Loop の動きを見てみます。

【開始前】
開始値:1
終了値:5
結果出力用文字列:Nothing

【1週目】
intStartValue:1
intEndValue:5
intStartValue <= intEndValue なのでDo Whileの中に入る
strResult に 1 を入れる(代入後のstrResult の中身:1)
intStartValue を1増やす

【2週目】
intStartValue:2
intEndValue:5
intStartValue <= intEndValue なのでDo Whileの中に入る
strResult に 2 を入れる(代入後のstrResult の中身:12)
intStartValue を1増やす

【3週目】
intStartValue:3
intEndValue:5
intStartValue <= intEndValue なのでDo Whileの中に入る
strResult に 3 を入れる(代入後のstrResult の中身:123)
intStartValue を1増やす

【4週目】
intStartValue:4
intEndValue:5
intStartValue <= intEndValue なのでDo Whileの中に入る
strResult に 4 を入れる(代入後のstrResult の中身:1234)
intStartValue を1増やす

【5週目】
intStartValue:5
intEndValue:5
intStartValue <= intEndValue なのでDo Whileの中に入る
strResult に 5 を入れる(代入後のstrResult の中身:12345)
intStartValue を1増やす

【6週目】
intStartValue:6
intEndValue:5
intStartValue > intEndValue なのでDo Whileの中に入らない

5週目のループの中でintStartValueの値が6になり、6週目のDo While開始前の条件判定で、条件式が intStartValue > intEndValue となったため、ループの中には入りませんでした。

【スポンサーリンク】

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

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

Private Sub cmdDoWhileLoop_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)
        Dim strResult As String = Nothing

        '開始値が終了値と同じ値になるまで繰り返し
        Do While intStartValue <= intEndValue
            strResult = strResult & intStartValue.ToString
            intStartValue = intStartValue + 1
        Loop

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

        txtResult.Text = strResult

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

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

【スポンサーリンク】

編集後記

「While ~ End While」と大差はありませんが、「Do While ~ Loop」の方がよく使われています。基本形さえ覚えてしまえば楽なので、サクッと覚えてしまいましょう。

【スポンサーリンク】

関連記事

【VB.NET】While文による繰り返し(While ~ End While)
VB.NETでは繰り返し文が複数用意されています。 While 条件式 ~ End While(←本記事) Do While 条件式 Loop Do ~ Loop While 条件式 Do Until 条件式 ~ Loop Do ~ Loo...
【VB.NET】文字列が空文字か確認する方法
文字列が空文字かどうかを確認する方法です。比較演算子を使用する方法が一般的ですが、文字列の長さやIsNullOrEmptyメソッドを使用してチェックする方法もあります。
【スポンサーリンク】

参考サイト

Do...Loop ステートメント - Visual Basic
詳細情報: Do...Loop ステートメント (Visual Basic)

.