For Each … Nextで条件分岐したいとき

For Each ... Next Excel VBA For Each…Next

For Each…Nextで分岐処理したいときはFlag(フラグ)をつかうと分かりやすいコードが書けます、下のコードはブック内にSheet3があるかどうか調べるコードです。

Sub ブック内からシート3を探す()

Dim Sheet As Worksheet
Dim Flag As Boolean

For Each Sheet In Worksheets

   If Sheet.Name = "Sheet3" Then Flag = True

Next Sheet

If Flag = True Then

   MsgBox "シートがありました。"

Else

   MsgBox "シートはありません。"

End If

End Sub

上のコードをVBAの教科書通りに書くと下のようなコードになります。

Sub ブック内からシート3を探す()

Dim Sheet As Worksheet

For Each Sheet In Worksheets

   If Sheet.Name = "Sheet3" Then
      
      MsgBox "シートがありました。"
      Exit Sub
   
   End If
   
Next Sheet
      
    MsgBox "シートはありません。"
      
End Sub

下のコードは「Else」をFor Each…Nextの中に入れてしまっているのでSheet3にたどり着くまでにMsgBoxが2回も表示されてしまいます、F8キーで1行ずつコードを実行して変数の値を確認しながらプログラムを作ると良いプロクラムが出来ると思います。

Sub ブック内からシート3を探す()

Dim Sheet As Worksheet

For Each Sheet In Worksheets

   If Sheet.Name = "Sheet3" Then
      
      MsgBox "シートがありました。"
      Exit Sub
   
   Else
   
      MsgBox "シートはありません。"
   
   End If
   
Next Sheet

コメント