本日の課題
Q:
VBAを下記の順番で実行します。
M1
M2
M3
さらにM1の終了後に「Sheet」が存在しない場合はM2とM3を実行しないようにします。
ソースコード
Sub all()
‘ M1を実行
Call M1
‘ Sheet2が存在するか確認
Dim ws As Worksheet
Dim sheetExists As Boolean
sheetExists = False
For Each ws In ThisWorkbook.Sheets
If ws.Name = “Sheet2” Then
sheetExists = True
Exit For
End If
Next ws
‘ Sheet2が存在しない場合は処理を中止
If Not sheetExists Then
MsgBox “Sheet2が存在しないため、処理を中止します。”, vbExclamation
Exit Sub
End If
‘ M2とM3を実行
Call M2
Call M3
End Sub
解説
1. サブルーチン(Sub)について
最初にSub all()とありますが、これは「allという名前のサブルーチン(処理のまとまり)」を定義しています。Subは「Subroutine(サブルーチン)」の略で、一連の命令をまとめて処理します。
2. M1を実行
VBA
Call M1
説明
この行では、M1という別のサブルーチンを呼び出して実行しています。M1はこのコードには書かれていませんが、どこか別の場所にあると仮定します。
3. Sheet2が存在するか確認
VBA
Dim ws As Worksheet
Dim sheetExists As Boolean
sheetExists = False
説明
ここでは、wsという名前の**ワークシート(Worksheet)を操作するための変数と、sheetExistsというブール型(Boolean)**の変数を宣言しています。Booleanは「真(True)」か「偽(False)」の値しか持てません。この時点では、sheetExistsに「False」を代入しています。これは、まだ「Sheet2」が存在するかどうか分からないため、仮に「存在しない」として処理を進めるためです。
VBA
For Each ws In ThisWorkbook.Sheets
If ws.Name = “Sheet2” Then
sheetExists = True
Exit For
End If
Next ws
説明
この部分は「ThisWorkbookに含まれるすべてのシートを順番に調べ、もしそのシートの名前が Sheet2 と一致した場合、sheetExists を True にする」という処理です。Exit Forは、Sheet2が見つかった時点でループを終了する命令です。
5. M2 と M3 の実行
vba
Call M2
Call M3
説明
もしSheet2が存在していれば、M2とM3という別のサブルーチンを順番に実行します。これらもどこか別の場所に定義されているはずです。
まとめ
このコードの流れを簡単に説明すると、以下の手順で処理が進みます。
M1を実行。
Sheet2がこのワークブックに存在するか確認。
Sheet2が存在しない場合、メッセージを表示して処理を中止。
Sheet2が存在すれば、M2とM3を実行。
これにより、必要なシートが存在しないときには無駄な処理を避けて、安全にコードを実行できます。
<目次に戻る>
スポンサーリンク
コメント