【Excel VBA】シートがアクティブになった時に処理を実行する(SheetActivate/Activate/SheetDeactivate/Deactivate)

はじめに

今回は、シートがアクティブになった時に処理を処理を実行する方法をご紹介します。
併せて、シートのアクティブ状態が解除された場合に処理を実行する方法も解説しますので、是非最後までお付き合いください。

この記事を読むメリット
  • シートがアクティブになった時に処理を処理を実行する方法が分かります。
  • シートのアクティブ状態が解除された場合に処理を実行する方法が分かります。
  • イベントを使用するための手順を画像付きで解説します。

前提

関連イベント

#イベント説明
1Workbook_SheetActivateブック内のシートがActiveになった場合に処理を実行する
2Workbook_SheetDeactivateブック内のシートのActive状態が解除された場合に処理を実行する
3Worksheet_Activate特定のシートがActiveになった場合に処理を実行する
4Worksheet_Deactivate特定のシートのActive状態が解除された場合に処理を実行する
シートのアクティブ状態に関するイベント

「Workbook」から始まるイベントは、ブック内すべてのシートに対して処理を実行します。

基本情報

Workbook_SheetActivateイベント

ブック内のシートがActiveになった場合に処理を実行する場合は、Workbook_SheetActivateイベント(以下「SheetActivateイベント」という)を使用します。

SheetActivateイベントは、ThisWorkbookモジュールに記載します。

構文

構文

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
…(ソースコードを入力)
End Sub

引数の「sh」には、ActivateされたシートのWorksheetオブジェクトが引き渡されます。

Workbook_SheetDeactivateイベント

ブック内のシートのActive状態が解除された場合に処理を実行する場合は、Workbook_SheetDeactivateイベント(以下「SheetDeactivateイベント」という)を使用します。

SheetDeactivateイベントは、ThisWorkbookモジュールに記載します。

構文

構文

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
…(ソースコードを入力)
End Sub

引数の「sh」には、Active状態が解除されたシートのWorksheetオブジェクトが引き渡されます。

Worksheet_Activateイベント

特定のシートがActiveになった場合に処理を実行する場合は、Worksheet_Activateイベント(以下「Activateイベント」という)を使用します。

Activateイベントは、Worksheetモジュールに記載します。

構文

構文

Private Sub Worksheet_Activate()
…(ソースコードを入力)
End Sub

Worksheet_Deactivateイベント

特定のシートがActiveになった場合に処理を実行する場合は、Worksheet_Deactivateイベント(以下「Deactivateイベント」という)を使用します。

Deactivateイベントは、Worksheetモジュールに記載します。

構文

構文

Private Sub Worksheet_Deactivate()
…(ソースコードを入力)
End Sub

イベントの記述方法

Workbookイベント

VBEより、ThisWorkbookモジュールを選択後、プルダウンリストから指定のイベントを指定します。
その後、コード欄に自動でイベントが記載されることを確認します。

Workbookイベントの設定方法

Worksheetイベント

VBEより、Worksheetモジュールを選択後、プルダウンリストから指定のイベントを指定します。
その後、コード欄に自動でイベントが記載されることを確認します。

Worksheetイベントの設定方法

手順①の「Worksheetモジュール」は、イベントを組み込みたいシートを選択してください。

サンプルコード

ブック内のシートがActiveになった場合に処理を実行する

サンプルコード
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    MsgBox Sh.Name & "シートがActiveになりました。"
End Sub

ブック内のシートのActive状態が解除された場合に処理を実行する

サンプルコード
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    MsgBox Sh.Name & "シートのActive状態が解除されました。"
End Sub

特定のシートがActiveになった場合に処理を実行する

サンプルコード
Private Sub Worksheet_Activate()

    MsgBox Me.Name & "シートがActiveになりました。"
End Sub

特定のシートのActive状態が解除された場合に処理を実行する

サンプルコード
Private Sub Worksheet_Deactivate()

    MsgBox Me.Name & "シートのActive状態が解除されました。"
End Sub

最後に

今回は、シートがアクティブになった場合に処理を実行する方法を解説しました。

本記事が皆さんのお力になれば幸いです!

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

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA