【VBA】While文の使い方まとめ

この記事では、VBA(Visual Basic for Applications)で使用するWhile文について、初心者から中級者までが理解できるように詳細に解説します。While文はプログラミングにおいて非常に重要な概念であり、その使い方をマスターすることで、より効率的なコードを書くことができます。本記事では、基本的な使い方から応用例、そしてよくあるトラブルシューティングまで、幅広くカバーしています。

目次

Whileステートメントとは

基本的な概念

Whileステートメントは、指定した条件がTrueである限り、特定の処理を繰り返し実行する制御構造です。この機能は、例えばデータの一括処理や、特定の条件が満たされるまでの待機処理など、多くの場面で活用されます。

なぜWhile文が必要なのか

繰り返し処理はプログラミングにおいて頻繁に行われるため、そのための専用の構文が用意されています。While文を使うことで、コードが短く、読みやすく、そして保守しやすくなります。

While文の種類と特性

VBAには、While文を使うためのいくつかの方法があります。それぞれに特有の特性と使いどころがあります。

While文の種類特性と使いどころ
While Wend– シンプルでわかりやすい形式。
– ループの途中で脱出するのがやや面倒。
Do While Loop– While Wendよりも柔軟性がある。
– ループの途中での脱出が容易。
Do Loop While– 最低でも一回は処理が実行される。
– 条件式の位置によっては読み手が混乱。

While Wendの使い方と詳細

基本形

While Wendの基本形は非常にシンプルです。

While 条件式
    ' 処理
Wend

サンプルコードと解説は下記の通り。

Sub WhileWendSample()
    Dim i As Integer
    Dim result As String
    
    i = 0
    While i < 5
        i = i + 1
        result = result & i & "回目の処理です" & vbCrLf
    Wend
    
    MsgBox result
End Sub

このサンプルコードでは、変数iが5未満である限り、iの値を1増やして、その値をメッセージボックスに表示する処理が繰り返されます。

注意点

While Wendはシンプルであるがゆえに、ループの途中で脱出する方法が限られています。Exit While文は使えないので、If文を使って条件を満たしたらExit Doでループを抜ける必要があります。

Do While Loopの使い方と詳細

基本形

Do While 条件式
    ' 処理
Loop

サンプルコードと解説は下記の通り。

Sub DoWhileLoopSample()
    Dim i As Integer
    Dim result As String
    
    i = 0
    Do While i < 5
        i = i + 1
        result = result & i & "回目の処理です" & vbCrLf
    Loop
    
    MsgBox result
End Sub

この形式もWhile Wendと同様、条件がTrueであれば処理が繰り返されます。しかし、Do While LoopExit Doを使って簡単にループを抜けることができます。

注意点

Do While Loopは柔軟性が高いですが、その分、ループ内で何が行われているのかをしっかりと把握する必要があります。特に、Exit Doを使いすぎると、コードが複雑になる可能性があります。

Do Loop Whileの使い方と詳細

基本形

Do
    ' 処理
Loop While 条件式

サンプルコードと解説は下記の通り。

Sub DoLoopWhileSample()
    Dim i As Integer
    Dim result As String
    
    i = 0
    Do
        i = i + 1
        result = result & i & "回目の処理です" & vbCrLf
    Loop While i < 5
    
    MsgBox result
End Sub

この形式は特に、条件が最初からFalseでも、一度は処理が実行されます。これは、例えばユーザー入力を受け取るような場合に有用です。

注意点

Do Loop Whileは、条件式が後ろにあるため、その条件が何であるかをコードの最後まで読まないとわからない可能性があります。そのため、この形式を使う場合は、コメントをしっかりと書いて、何が行われているのかを明示することが推奨されます。

複数の条件で使う方法

While文では、複数の条件をAndOrで組み合わせることができます。これにより、より複雑な条件下での繰り返し処理が可能になります。

Sub MultipleConditionsSample()
    Dim i As Integer
    Dim j As Integer
    Dim result As String
    
    i = 0
    j = 0
    While i < 5 And j < 3
        i = i + 1
        j = j + 1
        result = result & i & "回目、" & j & "回目の処理です" & vbCrLf
    Wend
    
    MsgBox result
End Sub

このサンプルコードでは、iが5未満であり、かつjが3未満である場合に、処理が繰り返されます。

サンプルコード

サンプルコード1: 1から10までの合計を計算する

このサンプルコードでは、1から10までの数値を足し合わせて合計を計算します。Do While Loopを使用しています。

Sub CalculateSum()
    Dim i As Integer
    Dim total As Integer
    
    i = 1 ' 初期値を設定
    total = 0 ' 合計を初期化
    
    Do While i <= 10 ' iが10以下の間繰り返す
        total = total + i ' 合計にiを加える
        i = i + 1 ' iを1増やす
    Loop
    
    MsgBox "1から10までの合計は " & total & " です。"
End Sub

このコードは、iが1から10までの数値を順番に加算し、その合計をメッセージボックスで表示します。

サンプルコード2: ユーザーが指定した回数だけメッセージを表示

このサンプルコードでは、ユーザーが指定した回数だけメッセージを表示します。While Wendを使用しています。

Sub ShowMessageMultipleTimes()
    Dim count As Integer
    Dim userInput As String
    
    userInput = InputBox("何回メッセージを表示しますか?")
    count = Val(userInput) ' ユーザーの入力を数値に変換
    
    While count > 0 ' countが0より大きい限り繰り返す
        MsgBox "メッセージを表示します。"
        count = count - 1 ' countを1減らす
    Wend
    
    MsgBox "メッセージ表示が完了しました。"
End Sub

このコードは、ユーザーが指定した回数だけメッセージを表示し、表示が完了したことを通知します。

サンプルコード3: 条件に合致するデータを検索

このサンプルコードでは、Excelのセルにデータを入力し、特定の条件に合致するデータを検索します。Do Loop Whileを使用しています。

Sub SearchData()
    Dim ws As Worksheet
    Dim searchValue As Integer
    Dim cell As Range
    
    ' 検索対象のシートを指定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 検索する値を入力
    searchValue = 42
    
    ' 最初のセルから順に検索
    Set cell = ws.Cells(1, 1)
    
    Do
        If cell.Value = searchValue Then
            MsgBox "値 " & searchValue & " が見つかりました。"
            Exit Do ' 条件に合致するデータを見つけたら終了
        End If
        ' 次のセルへ移動
        Set cell = cell.Offset(1, 1)
    Loop While Not IsEmpty(cell.Value) ' セルが空でない限り続ける
    
    If IsEmpty(cell.Value) Then
        MsgBox "値 " & searchValue & " は見つかりませんでした。"
    End If
End Sub

このコードは、指定した値を検索し、条件に合致するデータを見つけた場合に通知します。見つからなかった場合も通知します。Excelのシート内でデータを検索する際に役立ちます。

While文に関するFAQ

Q:Do While LoopとWhile Wendの違いは何ですか?

A:Do While LoopとWhile Wendは、どちらも条件が満たされる限りループを続けるための構文ですが、Do While Loopは条件の評価がループの最初で行われ、While Wendはループの最後で評価される点が異なります。

Q:While文を使うとき、何に注意すべきですか?

A:While文を使う際に注意すべき点は以下の通りです。

  1. ループの脱出条件を確実に設定すること。
  2. 無限ループに陥らないように気を付けること。
  3. ループ内の処理が必ず一度は実行されるようにすること。

Q:While文を使って何ができますか?

A:While文を使って以下のことができます。

  • 特定の条件が満たされるまでの間、処理を繰り返す。
  • データの集計や処理を行う。
  • ユーザーからの入力を待機し、条件が満たされたら処理を実行する。

Q:While文を使ってExcelのセルを検索する方法はありますか?

A:はい、While文を使ってExcelのセルを検索することができます。特定の条件に合致するセルを見つけるために、セルを一つ一つ順番に調べて条件を満たすセルを見つけるアプローチが使われます。

関連動画

まとめ

VBAのWhile文は、繰り返し処理を効率的に行うための非常に強力なツールです。この記事で解説した各種While文の形式とその特性、使い方を理解し、自分のコードに適した形を選んでください。特に、複数の条件を組み合わせることで、より高度なプログラミングが可能になります。この知識を活用して、より効率的なVBAプログラミングを楽しんでください。

Excelのショートカットキーの練習

当サイトはショートカットキーの練習を実際の動きを確認しながら練習できる機能がついています。繰り返し指を動かして練習ができるので、ゲーム感覚で遊んでいくうちに自然とショートカットキーが使えるようになれます。ショートカットキーは暗記するよりも実際に手を動かして練習していったほうが習得が早くなるので、是非当サイトをブックマークに登録し定期的に練習してみてください。下記のSTARTキーを押下すると練習を始められます。

下のスタートボタンを押して練習モードに入ります。
STARTSTOP
※入力モード切り替え ctrl + shift + alt + space
PRE
NEXT
現在の問題をリストから除外
除外したリストをリセット
現在の除外状況のURL取得
コピー
ガイドモード
リピートモード

※推奨ブラウザ Google Chrome

PUSH ENTER
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次