HOME > 即効テクニック > Excel VBA > グラフ関連のテクニック > Chartでイベント処理を行う−指定位置のグラフ要素を取得するには

即効テクニック

グラフ関連のテクニック

Chartでイベント処理を行う−指定位置のグラフ要素を取得するには

(Excel 97/2000)
グラフ上でのマウス操作によりグラフ上の要素を指定して処理を行うとき、GetChartElementメソッドやBeforeDoubleClickイベントを使用します。

サンプルでは、棒グラフ上のデータ系列上のデータ要素1つをクリックしたときに、対象となるデータ要素の項目と値を取得しています。

※X,Y座標を利用するため、MouseUpイベントを用いています。

(サンプル1)
※グラフシートのモジュールに貼り付けて棒グラフをクリックしてください。
Private Sub Chart_MouseUp _
    (ByVal Button As Long, _
    ByVal Shift As Long, _
    ByVal x As Long, _
    ByVal y As Long)

Dim ElemID As Long, Arg1 As Long, Arg2 As Long
Dim Var As Variant
Dim Msg As String

'GetChartElementメソッドを用いてクリックしたデータ系列を取得。
'第三引数以降に対象オブジェクトの情報が格納される
’※データ系列の場合は第四引数:SeriesIndex,第五引数:PointIndex
ActiveChart.GetChartElement x, y, ElemID, Arg1, Arg2

'変数ElemIDに格納されたElementIDにより処理を分岐
Select Case ElemID '定数値の詳細はヘルプを参照
    
    Case xlSeries 'データ系列
    'GetChartElementの第五引数に格納された情報(ここではPointIndex)
    'をもとにSeriesオブジェクトから項目名と値を取得
    Var = ActiveChart.SeriesCollection(Arg1).XValues
    Msg = "要素:" & Var(Arg2)

    Var = ActiveChart.SeriesCollection(Arg1).Values
    Msg = Msg & vbCrLf & "値:" & Var(Arg2)

    MsgBox Msg

Case Else
    'その他の処理

End Select

End Sub
※GetChartElementを使わずにグラフ上の要素をChart_Select, BeforeDoubleClickイベントで取得することが可能です。ただし、この場合・・・
Private Sub Chart_BeforeDoubleClick _
    (ByVal ElementID As Long, _
    ByVal Arg1 As Long, _
    ByVal Arg2 As Long, _
    Cancel As Boolean)

End Sub
・・・のようになりますが、上記サンプルと同じことを行う場合、シングルクリックでデータ系列全体が選択された状態ではArg2には全体が選択されてることを表す”-1”が格納されます。この場合X,Y座標を取得できないため、単一のデータ系列を取得するには再度選択しなおす必要が生じます。