8.関連するVBA
ステップ2に関連するVBAを説明しますので、シート[VBA説明用]を選択・表示してください。
説明2-1 シートの追加と削除
操作
次の二種類の操作をしましょう。
- 種類1:操作-(1)と操作-(2)
- 種類2:操作-(1)と操作-(3)
操作-(1)
1).[シートの追加]をクリックする。
次の2)から5)までは、その時点の「ActiveSheet(アクティブシート)」を表示します。「アクティブ」とは「選択している、操作ができる対象になっている」等を意味し、「シート」だけでなく「セル」にも「ActiveCell」として使用する場合があります。
2).[OK]をクリックする。(ActiveSheet:シート「VBA説明用」)
3).[OK]をクリックする。(ActiveSheet:シート「Sheet1」)
4).[OK]をクリックする。(ActiveSheet:シート「説明用2-1」;シート名「Sheet1」が変更された)
5).[OK]をクリックする。(ActiveSheet:シート「VBA説明用」)
6).シート[説明用2-1]がシート[VBA説明用]の後ろに追加される。
操作-(2)
1).[シートの削除1]をクリックする。
2).削除確認用メッセージが表示され、[削除]をクリックする。
削除確認用メッセージは、プロシージャではなく、Excel自体が表示しています。
3).シート[説明用2-1]が削除される。
操作-(3)
1).[シートの削除2]をクリックする。
2).シート[説明用2-1]が削除される。
削除確認用メッセージは表示されません。
プロシージャ「説明用211_シートの追加」の内容
[シートの追加]ボタンのプロシージャを表示しましょう。
- Sub 説明用211_シートの追加()
- MsgBox "1.現在のActiveSheetは、シート[ " & ActiveSheet.Name & " ]です"
- Sheets.Add After:=ActiveSheet
- MsgBox "2.現在のActiveSheetは、シート[ " & ActiveSheet.Name & " ]です"
- On Error GoTo ERR211
- ActiveSheet.Name = "説明用2-1"
- MsgBox "3.現在のActiveSheetは、シート[ " & ActiveSheet.Name & " ]です"
- Sheets("VBA説明用").Select
- MsgBox "4.現在のActiveSheetは、シート[ " & ActiveSheet.Name & " ]です"
- Exit Sub
- ERR211:
- MsgBox "既にシート[説明用2-1]がありますので、このシート[Sheet n]は手作業で削除してください"
- End Sub
- 1行目:「Subプロシージャ」の開始
- 2行目:ダイアログボックスに、現在の「1.ActiveSheet名」を表示
- 3行目:[Add]命令により、現在のActiveSheetの後ろ([After:=ActiveSheet])にシートを追加
- 4行目:ダイアログボックスに、現在の「2.ActiveSheet名」を表示
- 5行目:On Error GoTo以下の処理がエラーになった時に、[ERR211]にジャンプ(制御を移す)
- 6行目:シート名を [説明用2-1]に変更
- 7行目:ダイアログボックスに、現在の「3.ActiveSheet名」を表示
- 8行目:シート[VBA説明用]を選択
- 9行目:ダイアログボックスに、現在の「4.ActiveSheet名」を表示
- 10行目:このプロシージャを抜ける
- 11行目:[ERR211]という行ラベル(プロシージャ内の特定の場所を表す)に[:]を付けて記述
- 12行目:ダイアログボックスに、エラー時の処理を表示
- 13行目:「Subプロシージャ」の終了
【On Error GoTo】
プロシージャ内では、次のようにエラーが発生する場合があります。
- シート[説明用2-1]がある状態で、シート[説明用2-1]を追加
- シート[説明用2-1]がない状態で、シート[説明用2-1]を削除
この場合、エラー処理を記述しないと異常終了します。
この異常終了を避けるために[On Error GoTo]を使用しましたが、発生したエラーを無視し処理を続行するステートメントとして[On Error Resume Next]を使用する場合もあります。
プロシージャ「説明用212_シートの削除1」の内容
[シートの削除1]ボタンのプロシージャを表示しましょう。
- Sub 説明用212_シートの削除1()
- On Error GoTo ERR212
- Sheets("説明用2-1").Delete
- Sheets("VBA説明用").Select
- Exit Sub
- ERR212:
- MsgBox "シート[説明用2-1]がありません"
- End Sub
- 1行目:「Subプロシージャ」の開始
- 2行目:On Error GoTo以下の処理がエラーになった時に、[ERR212]にジャンプ(制御を移す)
- 3行目:シート [説明用2-1]を削除
- 4行目:シート[VBA説明用]を選択
- 5行目:このプロシージャを抜ける(終了)
- 6行目:行ラベル
- 7行目:ダイアログボックスに、エラー時の処理を表示
- 8行目:「Subプロシージャ」の終了
プロシージャ「説明用213_シートの削除2」の内容
[シートの削除2]ボタンのプロシージャを表示しましょう。
- Sub 説明用213_シートの削除2()
- On Error GoTo ERR213
- Application.DisplayAlerts = False
- Sheets("説明用2-1").Delete
- Application.DisplayAlerts = True
- Exit Sub
- ERR213:
- MsgBox "2-1シート[説明用2-1]がありません"
- End Sub
- 1行目:「Subプロシージャ」の開始
- 2行目:On Error GoTo以下の処理がエラーになった時に、[ERR213]にジャンプ(制御を移す)
- 3行目:関する確認メッセージを非表示(False)に設定
- 4行目:シート [説明用2-1]を削除
- 5行目:確認メッセージを表示(True)に設定
- 6行目:このプロシージャを抜ける(終了)
- 7行目:行ラベル
- 8行目:ダイアログボックスに、エラー時の処理を表示
- 9行目:「Subプロシージャ」の終了
【DisplayAlerts】
プロシージャ「説明用212_シートの削除1」と「説明用213_シートの削除2」の大きな違いは、[DisplayAlerts]命令です。
Excelでいろいろな確認、または警告のメッセージが表示された時、表示されたメッセージに対して[OK][キャンセル]等のボタンを押すまでは処理が中断されたままになります。
一連の動作を中断させたくない場合、[DisplayAlerts]を[False]に設定し確認・警告メッセージを非表示にしますが、それ以降も非表示の状態が続きますので、[DisplayAlerts]を[True]に設定し表示の状態に戻しています。
次にシート[実習用VBA]で実習を行いましょう。
確認が終わりましたら、VBE画面の左上[Excel]アイコンをクリックしてシート[VBA説明用]に戻りましょう。