【記事4: Do…Loop ループの活用】《ループ処理について》

はじめに

この記事では、Excel VBAで繰り返し処理を行うための構文であるDo…Loop ループについて詳しく説明します。基本構文の紹介から実践的な使い方まで解説し、他のループ処理との使い分けも紹介します。

Do…Loop ループの基本構文

Do…Loop ループは、条件に応じて処理を繰り返すための構文です。以下に基本構文を示します。


Do While 条件式
    ' 繰り返し処理
Loop

または、次のようにDo Untilを使うこともできます。


Do Until 条件式
    ' 繰り返し処理
Loop

Do Whileは条件式が真の間、繰り返し処理を実行し続けます。Do Untilは条件式が偽の間、繰り返し処理を実行し続けます。

Do…Loop ループの実践例

条件に応じた繰り返し処理

Do…Loop ループを使って、条件に応じて繰り返し処理を行う例です。


Sub ConditionalRepeat()
    Dim i As Integer
    i = 1
    
    Do While i <= 10
        Debug.Print i
        i = i + 1
    Loop
End Sub

このコードでは、iが1から10までの間、iの値を出力してからiに1を加算しています。

データの検索

Do…Loop ループを使って、データを検索する例です。


Sub SearchData()
    Dim rng As Range
    Dim cell As Range
    Dim targetValue As Variant

    Set rng = Range("A1:A100")
    targetValue = InputBox("検索する値を入力してください。")
    
    For Each cell In rng
        Do While cell.Value <> targetValue And cell.Row < 100
            Set cell = cell.Offset(1, 0)
        Loop
        
        If cell.Value = targetValue Then
            MsgBox "見つかりました: " & cell.Address
            Exit Sub
        End If
    Next cell
    
    MsgBox "見つかりませんでした。"
End Sub

このコードでは、セル範囲”A1:A100″の中から、入力された値と一致するデータを検索しています。

エラー処理

Do…Loop ループを使って、エラー処理を行う例です。


Sub ErrorHandler()
    Dim userInput As Variant
    Dim num As Double
    
    Do
        userInput = InputBox("数字を入力してください。")
        
        On Error Resume Next
        num = CDbl(userInput)
        If Err.Number <> 0 Then
            MsgBox "無効な入力です。数字を入力してください。"
            Err.Clear
        Else
            Exit Do
        End If
    Loop
    
    MsgBox "入力された数字: " & num
End Sub

このコードでは、ユーザーが入力した値が数字であることを確認しています。無効な入力がある場合、エラーメッセージを表示して再度入力を求めます。

Do…Loop と他のループ処理の使い分け

Do…Loop ループは条件に応じた繰り返し処理に適しています。他のループ処理との使い分けについて説明します。

  • For…Next: 繰り返し回数が明確な場合や、一定間隔で繰り返し処理を行いたい場合に適しています。
  • For Each…Next: オブジェクトコレクションや配列など、要素を順番に処理する場合に適しています。
  • Do…Loop: 条件に応じて繰り返し処理を行いたい場合や、繰り返し回数が不明な場合に適しています。

まとめ

この記事では、Excel VBAのDo…Loop ループについて詳しく説明しました。基本構文の紹介から実践的な使い方まで解説し、他のループ処理との使い分けも紹介しました。Do…Loop ループを使いこなすことで、柔軟な繰り返し処理を実現できます。

演習問題

以下の演習問題を解いて、Do…Loop ループの理解を深めましょう。

  1. 1から10までの数字を足し合わせるプログラムを、Do…Loop ループを使って作成してください。
  2. ユーザーに入力を求め、入力された数字が正の整数であることを確認するプログラムを、Do…Loop ループを使って作成してください。

解答

以下に演習問題の解答例を示します。

  1. 
        Sub SumNumbers()
            Dim sum As Long
            Dim i As Integer
        i = 1
        Do While i <= 10
            sum = sum + i
            i = i + 1
        Loop
        
        MsgBox "1から10までの合計は: " & sum
    End Sub
    
  2. 
        Sub PositiveIntegerCheck()
            Dim userInput As Variant
            Dim num As Integer
        Do
            userInput = InputBox("正の整数を入力してください。")
            num = CInt(userInput)
            If num <= 0 Then
                MsgBox "入力が正の整数ではありません。再度入力してください。"
            Else
                Exit Do
            End If
        Loop
        
        MsgBox "入力された正の整数: " & num
    End Sub
    

簡単な解説

  1. この解答では、Do…Loop ループを使って1から10までの数字を順番に足し合わせています。ループ内でsumにiの値を加算し、iを1ずつ増やしています。ループが終了した後、合計値が表示されます。
  2. この解答では、ユーザーに入力を求め、その入力が正の整数であることを確認するためにDo…Loop ループを使っています。もし入力が正の整数でない場合、エラーメッセージを表示して再度入力を求めます。正の整数が入力されたら、ループを終了し、入力された値を表示します。

コメント