はじめに
この記事では、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から10までの数字を足し合わせるプログラムを、Do…Loop ループを使って作成してください。
- ユーザーに入力を求め、入力された数字が正の整数であることを確認するプログラムを、Do…Loop ループを使って作成してください。
解答
以下に演習問題の解答例を示します。
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
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
簡単な解説
- この解答では、Do…Loop ループを使って1から10までの数字を順番に足し合わせています。ループ内でsumにiの値を加算し、iを1ずつ増やしています。ループが終了した後、合計値が表示されます。
- この解答では、ユーザーに入力を求め、その入力が正の整数であることを確認するためにDo…Loop ループを使っています。もし入力が正の整数でない場合、エラーメッセージを表示して再度入力を求めます。正の整数が入力されたら、ループを終了し、入力された値を表示します。
コメント