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
コメント