【Excel VBA入門】 ワークブックのイベント|自動実行マクロ|セル・シート操作などを起点

操作編

開発タブから「マクロを実行」させたり「マクロボタン」を押したりするほかに、マクロの実行タイミングをワークブックのイベントを起点に設定することができます。

こちらでは、ワークシートのイベントによってマクロを実行させる方法をご紹介します。

スポンサーリンク

ワークブックのイベントとは

マクロ実行の起点にできるワークシートの操作を指します。
たとえば、こちらのようなものがあります。

イベント発生時期
SheetActivateワークシートがアクティブになったタイミング
SheetBeforeDeleteワークシートが削除される前のタイミング
SheetBeforeDoubleClickワークシートをダブルクリックしたタイミング
SheetBeforeRightClickワークシートを右クリックしたタイミング
SheetChangeワークシートのセルが変更されたタイミング
SheetSelectionChangeワークシートのセルの選択範囲が変更されたタイミング
Deactivateワークシートが非アクティブになったタイミング

こちらの他にもワークシートイベントがいくつかありますが、普段の作業でよくつかうと思われるものだけを厳選しました。

ワークブックのイベント|コード記述の準備

まずはコードを記述する準備をしましょう。
ワークブックのイベントは、「標準モジュール」ではなく「Microsoft Excel Object」にコードを記述します。

表示方法はこちらです。

1. VBEを起動する(「alt」と「F11」の同時押し)

2. 「ThisWorkbook」を選択する

3. 「Workbook」を選択する

4. ワークブックイベントを選択する(例は「SheetActivate」を選択)

5. 不要なコードを削除する(手順3.のあとに不要なコードが自動入力されてしまいます)

こちらでワークブックのイベントを選択した状態になりますので、ここにマクロで実行させたいコードを記述していきます。

今回の例では、すべてのワークシートに対してマクロを実行させたいため、ワークシートよりもひとつ上の階層であるワークブック「ThisWorkbook」を選択しています。

ThisWorkbook」を選択することによって、すべてのワークシートにたいしてマクロが有効になります。

それとは別に、マクロを動作させるワークシートを限定したい場合は、該当するワークシートを選択してからコードを記述します。

特定のワークシートを選択してコードを記述することによって、ワークブック全体ではなく、それぞれのワークシートごとにマクロを設定することができます。

手順は次のとおりです。

1. VBEを起動する(「alt」と「F11」の同時押し)

2. 対象のワークシートを選択する

3. 「Worksheet」を選択する

4. ワークシートイベントを選択する

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

「ワークシートをダブルクリックしたタイミング」でマクロの実行ができます。

こちらの例では、ダブルクリックしたセルを任意の書式に変更できるマクロを作成します。

手順はこちらです。

  1. 「マクロの記録」をつかって書式を記録する
  2. ワークシートイベントにコードを組み込む
  3. コードの内容を調整する

さきに結果をご覧ください。
以下は、「セル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列」に日時が自動的に入力されます。

まとめ

ワークブックイベントについて紹介しました。

いくつか具体例をつかってご説明しましたが、今回ご紹介していないワークブックイベントもありますので、自動実行したい目的にあわせてマクロをつくってみてください。

タイトルとURLをコピーしました