• 締切済み

EXCEL散布図のマーカーのクリック

Excelの散布図について質問させてください。 散布図上のマーカーにマウスを移動させると系列や座標値がコメント表示されますが、たとえばマーカーのクリックをトリガとして、「データー」一覧シートの所定の行を表示させるようなアプリケーションを作りたいと思っています。 Excelでは、ユーザによるマーカー選択情報を取得するようなことは実現できないのでしょうか?

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

出来合いの『Excelの散布図』では厳しいと思います。 少なくとも私には実現できません。 私だったら、 出来合いの『Excelの散布図』を使わず、 自前で図形を配置し、見掛け上『Excelの散布図』にします。 参考になりそうなコードを後記しますので よかったら試してみてください。 なお、詳しくはコードを読んでください。 Option Explicit '//-------------- 散布図用ドット描写 Sub TestX()  Dim Sh As Worksheet '作成先シート  Dim Nm As String  '図形名  Dim Bx As Double  '開始横位置  Dim By As Double  '開始縦位置  Dim Hi As Double  '高さ  Dim Wi As Double  '幅  Dim Cr As Long  '色  Dim r As Long  Set Sh = ThisWorkbook.Sheets("Work")  Hi = 4  Wi = 4  Cr = rgbRed    For r = 2 To 8   Nm = Sh.Cells(r, 1).Value   Bx = Sh.Cells(r, 2).Value + 300   By = Sh.Cells(r, 3).Value   MakeBelt Sh, Nm, Bx, By, Hi, Wi, Cr  Next r End Sub '//-------------- 散布図用ドットがクリックされた時の処理 Sub ExShapeClick()  Dim kname As String  Dim r As Long  kname = Application.Caller  r = 2  With ThisWorkbook.Sheets("work")   Do    If .Cells(r, 1).Value = "" Then Exit Do    If .Cells(r, 1).Value = kname Then     .Cells(r, 1).Select     Exit Do    End If    r = r + 1   Loop  End With End Sub '//-------------- ドット描写用プロシジャー Sub MakeBelt(Sh As Worksheet, Nm As String, _     Bx As Double, By As Double, Hi As Double, Wi As Double, Cr As Long)    Dim shp As Shape  Dim SPos As Double    On Error Resume Next  Set shp = Sh.Shapes(Nm)  shp.Delete  On Error GoTo 0  SPos = By - Hi  Set shp = Sh.Shapes.AddShape(msoShapeRectangle, Bx, SPos, Wi, Hi)  shp.Name = Nm  shp.Fill.ForeColor.RGB = Cr  shp.Line.Visible = False '外枠の有無  shp.OnAction = "ExShapeClick" End Sub

cookuroshiba
質問者

補足

「参考になりそうなコード」、ありがとうございます。詳細に確認してみたいと思います。 ところで、このお礼を兼ねて現状報告まで。 グラフシートに散布図を描くことで Chart_MouseDown()イベントを発生させられることまでは前記したとおり。以前は、このイベントハンドラ内で、Selectionの属性を取得することでクリックされたマーカーを捕まえようとしていたのですが、マーカーをクリックしたつもりでもチャートエリア全体がSelectされたり、そのマーカーが属する系列全体が選択されたりと、操作性の良いGUIは作れませんでした。 そこでChart_MouseDown()で受け渡されるクリックされたXY座標値を使用して ActiveChart.GetChartElement x, y, ElemID, Arg1, Arg2 を実行することで、指定した座標のチャート要素の属性値を取得することで、どの系列の何番目の要素なのかを知ることができました。 Excelって、色々考えられて設計されてますね。改めて凄いと認識させられました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

データラベルを表示し、そのデータラベルの「内容」の項目を、セルの値や系列名、などににすれば、内容がわかるのに、シートのセルを指し示して、どうするのか。 そのグラフの系列の点をクリックすると、元データシートの系列も指し示してくれるようだが、それでは不十分なのか?  質問が実現したとして、あと、何がやりたいのか? 仕組み的に、簡単に実現すれば、それもやれば良いが、イベントの補足ー>該当箇所の情報の独自表示、は、普通レベルでは、むつかしいのでは?

cookuroshiba
質問者

お礼

ご意見ありがとうございます。ユーザアプリケーションには十人十色、色々存在し、「シートのセルを指し示」すことで付加価値を出すこともあります。 色々と調べてみたところ、散布図グラフをワークシートに作成するのではなく、グラフシートに作成することで、Chart_MouseDownイベントを認識することもでき、ハンドラ内でTypeName(Selection)が"Point"であることを知れるところまで進みました。あとは認識できたPointオブジェクトが、元データのどれに対応するのかを紐づけることができれば勝利です。