開発タブから「マクロを実行」させたり「マクロボタン」を押したりするほかに、マクロの実行タイミングをワークブックのイベントを起点に設定することができます。
こちらでは、ワークシートのイベントによってマクロを実行させる方法をご紹介します。
ワークブックのイベントとは
マクロ実行の起点にできるワークシートの操作を指します。
たとえば、こちらのようなものがあります。
イベント | 発生時期 |
SheetActivate | ワークシートがアクティブになったタイミング |
SheetBeforeDelete | ワークシートが削除される前のタイミング |
SheetBeforeDoubleClick | ワークシートをダブルクリックしたタイミング |
SheetBeforeRightClick | ワークシートを右クリックしたタイミング |
SheetChange | ワークシートのセルが変更されたタイミング |
SheetSelectionChange | ワークシートのセルの選択範囲が変更されたタイミング |
Deactivate | ワークシートが非アクティブになったタイミング |
こちらの他にもワークシートイベントがいくつかありますが、普段の作業でよくつかうと思われるものだけを厳選しました。
ワークブックのイベント|コード記述の準備
まずはコードを記述する準備をしましょう。
ワークブックのイベントは、「標準モジュール」ではなく「Microsoft Excel Object」にコードを記述します。
表示方法はこちらです。
1. VBEを起動する(「alt」と「F11」の同時押し)
2. 「ThisWorkbook」を選択する
3. 「Workbook」を選択する
4. ワークブックイベントを選択する(例は「SheetActivate」を選択)
5. 不要なコードを削除する(手順3.のあとに不要なコードが自動入力されてしまいます)
こちらでワークブックのイベントを選択した状態になりますので、ここにマクロで実行させたいコードを記述していきます。
ワークブックイベント 3選|具体例をつかって確認
先ほどご紹介したワークブックイベントのなかでも特によく使うと思われるものを、具体的な例をつかってご紹介します。
ここでそれぞれの具体的な使い方を知って、ワークブックイベントの使い方のイメージを持てるようになりましょう。
ワークブックイベント|SheetActivate
「ワークシートがアクティブになったタイミング」でマクロの実行ができます。
データ入力用の複数シートがあるエクセルに対してつかってみましょう。
ワークシートを選択するたびに「選択セルが最下行に移動」する設定をしたいとおもいます。
こちらが今回使用するサンプルです。
こちらがコードです。
Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim lastrow As Long lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row Cells(lastrow + 1, 1).Select End Sub
こちらが実行結果です。
シートを選択するたびにマクロが実行されて自動的にセルが選択されます。
わたしはデータ入力の場所をまちがえやすいエクセルにつかっています。
ワークブックイベント|SheetBeforeDoubleClick
「ワークシートをダブルクリックしたタイミング」でマクロの実行ができます。
こちらの例では、ダブルクリックしたセルを任意の書式に変更できるマクロを作成します。
手順はこちらです。
- 「マクロの記録」をつかって書式を記録する
- ワークシートイベントにコードを組み込む
- コードの内容を調整する
さきに結果をご覧ください。
以下は、「セルA5」をダブルクリックしたあとの状態です。
手順1|「マクロの記録」をつかって書式を記録する
まずはワークブックイベントに組み込みたい任意の設定をします。
今回はお手軽に「マクロの記録」をつかってコードを自動生成します。
設定内容はこちらです。
- セルの背景色を黄色にする
- 太字にする
- 文字を赤色にする
「マクロの記録」によって自動生成されたコードはこちらです。
Sub Macro1() With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.Font.Bold = True With Selection.Font .Color = -16776961 .TintAndShade = 0 End With End Sub
手順2|ワークブックイベントにコードを組み込む
まず、「SheetBeforeDoubleClick」を選択します。
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) End Sub
さきほどのコードを組み込みます。
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 65535 .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.Font.Bold = True With Selection.Font .Color = -16776961 .TintAndShade = 0 End With End Sub
手順3|コードの内容を調整する
こちらの例で自動生成した「マクロの記録」では、セル位置を指定するなどといった固有のコードがふくまれていなかったためコードの調整は不要です。
しかし、「マクロの記録」ではセルひとつ選択するたびにコードが自動生成されますので、ワークブックイベントに組み込む前にあらかじめコードの内容を確認しておきましょう。
ワークブックイベント|SheetChange
「ワークシートのセルが変更されたタイミング」でマクロの実行ができます。
こちらの例では、データの入力日時の履歴を記録するためにマクロを作成します。
コードはこちらです。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim lastrow As Long lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row Cells(lastrow, 2).Value = Now End Sub
「セルA列」に値を入力するたび、「セルB列」に日時が自動的に入力されます。
まとめ
ワークブックイベントについて紹介しました。
いくつか具体例をつかってご説明しましたが、今回ご紹介していないワークブックイベントもありますので、自動実行したい目的にあわせてマクロをつくってみてください。