- ベストアンサー
VBAでの質問
VBAで散布図を作成し,そのグラフの要素をクリックすると,その要素の値が表示されるようなプログラムを作成したくて,いろいろ調べ作成しています.散布図を作成するまではできましたが,要素をクリックすると数値が表示される,部分がうまくできず,苦戦しています.何かいい方法があれば教えて頂きたいです.初心者なもので,分からないことばかりですが,お願いします.
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
検索すれば沢山ヒットすると思うのですが、 http://okwave.jp/qa/q8272300.html ここで紹介したmougのリンクが切れてしまっているので(QAで無いので安心していたのですが) 若干アレンジしたものを投稿いたします。 シートに散布図一個と、ActiveXのチェックボックスが一個あるとします。 チェックボックスをチェックすると、散布図のデータ表示が有効になります。 グラフ上のポイントにカーソルを近づけると表示されるものを真似してみました。 当該シートモジュールに記載します。 Private WithEvents myChart As Chart Private Sub CheckBox1_Click() If Me.CheckBox1.Value = True Then Set myChart = Me.ChartObjects(1).Chart Else Set myChart = Nothing End If End Sub Private Sub myChart_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 myXValues As Variant, myValues As Variant Dim Msg As String If Me.CheckBox1.Value = False Then Exit Sub 'GetChartElementメソッドを用いてクリックしたデータ系列を取得。 '第三引数以降に対象オブジェクトの情報が格納される '※データ系列の場合は第四引数:SeriesIndex,第五引数:PointIndex ActiveChart.GetChartElement x, y, ElemID, Arg1, Arg2 '変数ElemIDに格納されたElementIDにより処理を分岐 Select Case ElemID Case xlSeries 'データ系列 'GetChartElementの第五引数に格納された情報(ここではPointIndex) 'をもとにSeriesオブジェクトから項目名と値を取得 Msg = "系列 " & Chr(34) & ActiveChart.SeriesCollection(Arg1).Name & Chr(34) myXValues = ActiveChart.SeriesCollection(Arg1).XValues myValues = ActiveChart.SeriesCollection(Arg1).Values Msg = Msg & " 要素 " & Chr(34) & CStr(myXValues(Arg2)) & Chr(34) Msg = Msg & vbCrLf & "( " & CStr(myXValues(Arg2)) & " , " & CStr(myValues(Arg2)) & " )" MsgBox Msg Case Else 'その他の処理 End Select End Sub
その他の回答 (1)
- mitarashi
- ベストアンサー率59% (574/965)
お礼
すみません.ひとつ間違いがありました.ActiveChart.GetChartElement x, y, ElemID, Arg1, Arg2 の後に Sheet1.Range("A1").Value = 1 Sheet1.Range("A2").Value = Arg2 を入力すると,A1に1の値で,A2には何も表示されませんでした.GetChartElementがきちんと動作されていないようです...
補足
ありがとうございます.早速プログラムを組んでみたのですが,グラフの要素をクリックしても反応は全くありませんでした. Private Sub myChart_MouseUpが動いているか確認するために, ActiveChart.GetChartElement x, y, ElemID, Arg1, Arg2 の後に, Sheet1.Range("A1").Value = 1 Sheet1.Range("A2").Value = Arg2 を入力したところ,プロットエリア全体をクリックしたとき,A1に1,A2に0が表示されました.メッセージボックスは表示されませんでした.原因が全く分かりません.分かる範囲で回答お願いします.