皆さんこんにちは!!
今回はかなりコアな内容で、VBA上級者の方でもあまり使ったことがないであろう、「VBAでのグラフイベント操作」を取り上げたいと思います。
グラフを描画したり、ピボットテーブルをVBAから描画するコードは色々なサイトで見かけますし、実際に使用されている方も多いかと思います。
かなり、上級者向けの内容なので分からない部分があれば、コメントください。
VBAのイベントについては当ブログでも以下のページなどで解説しています。
ちょっと難しい内容も含まれていますが、併せてご覧ください。

もくじ
グラフイベントの基本
まずは、実用性は皆無ですが、グラフがアクティブになった際にメッセージボックスで、グラフのオブジェクト名を出力するコードを書きます。
プログラムの実装
まず、新規ExcelBookを作成して、標準モジュールに下記コードを転記してください。
Option Explicit
Dim myChtCls As New ChartEventCls
Sub InitializeChartEvent()
Set myChtCls.myCht = Worksheets(1).ChartObjects(1).Chart
End Sub
続けて、クラスモジュールを一つ挿入し、オブジェクト名を「ChartEventCls」として、下記のコードを転記してください。
Option Explicit
Public WithEvents myCht As Chart
Private Sub myCht_Activate()
MsgBox Me.myCht.Name & "がActiveになりました。"
End Sub
続けてThisWorkbookのOpenイベントで標準モジュールの、InitializeChartEvent()メソッドを呼び出すようにします。
Option Explicit
Private Sub Workbook_Open()
Call InitializeChartEvent
End Sub
コードの準備は終わったので、あとはシートに下図の様な適当なグラフを用意してください。
※どんなグラフでも良いです。

Excelブックを保存し、ファイルを開きなおしてください。
グラフをクリックすると、
「Sheet1グラフ1がActiveになりました。」
と、イベントでメッセージが出力されたかと思います。
グラフ操作のイベントをキャッチできたことが分かったかと思います。
簡単な解説
イベントをハンドル出来たことは、皆さん分かったかと思いますが、何が起こったのか、よく分からないかと思いますので、簡単に解説します。
まず、一番大切なクラスモジュールのコードです。
大切なので、もう一度コードを載せます。
Public WithEvents myCht As Chart
Private Sub myCht_Activate()
MsgBox Me.myCht.Name & "がActiveになりました。"
End Sub
ここで、大切なのは「WithEvents」の部分になります。
WithEventsについては、この記事で解説しているので分からない方は読んでください。
WithEventsを付けてChartオブジェクトを宣言することで、Chartオブジェクトを自由にハンドル出来るようになります。
基本的に「WithEvents」の動作が分からなければ、理解できないので必ずこの記事を読んでください。
クラスの意味が理解できれば後は簡単です。
クラスは、インスタンス化しなければ使用できないので、標準モジュールの下記のコードで、インスタンス化してやります。
Dim myChtCls As New ChartEventCls
Sub InitializeChartEvent()
Set myChtCls.myCht = Worksheets(1).ChartObjects(1).Chart
End Sub
今回は、パブリック変数を「ChartEventCls」型として宣言しておいて、InitializeChartEvent()メソッドで、Sheetインデックス1番目(一番左のシート)の、1番目のグラフオブジェクトを代入しインスタンス化しています。
ThisWorkbookのOpenイベントは、単純にBookを開いた段階で、インスタンス化を行うために作りました。
正直、標準モジュールを手動で実行していただいても問題ありません。
ただ、InitializeChartEvent()メソッドを未実行の場合、グラフがアクティブになってもイベントはハンドル出来ません。
まとめ
今回の記事で、本当はもっと複数のグラフイベントを扱うつもりだったのですが、概念が入門書には無いレベルで難しくなってしまうので、今回は「基礎編」という位置づけで、記事を分けることにしました。
近々、続きの応用記事を書きます。
グラフやピボットテーブルのイベントを使いこなすと、UserFormを使いこなす以上に、ユーザーフレンドリーなシステムを構築できます。
業務で使用する帳票には、グラフやピボットテーブルなどが複数含まれ、集計表自体が複雑で項目が多いことが多いです。
そんな集計表を、グラフのイベントを使いこなす事で見やすい且つ使いやすいエクセル表に作り替える事ができるので、皆さんも是非、マスターしてください!!
最後までお読みいただき、ありがとうございました!!