Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3115 / 13646 ツリー ←次へ | 前へ→

【64177】グラフ(散布図)中の任意に選択したX値Y値を表示 かじったばかり 10/1/23(土) 10:13 質問[未読]
【64178】Re:グラフ(散布図)中の任意に選択したX値... kanabun 10/1/23(土) 11:04 発言[未読]
【64179】Re:グラフ(散布図)中の任意に選択したX値... kanabun 10/1/23(土) 11:15 発言[未読]
【64180】Re:グラフ(散布図)中の任意に選択したX値... kanabun 10/1/23(土) 11:20 発言[未読]
【64181】Re:グラフ(散布図)中の任意に選択したX値... かじったばかり 10/1/23(土) 16:59 質問[未読]
【64182】Re:グラフ(散布図)中の任意に選択したX値... kanabun 10/1/23(土) 18:24 発言[未読]
【64183】Re:グラフ(散布図)中の任意に選択したX値... かじったばかり 10/1/23(土) 20:05 お礼[未読]

【64177】グラフ(散布図)中の任意に選択したX値...
質問  かじったばかり  - 10/1/23(土) 10:13 -

引用なし
パスワード
   お世話になります。


早速ですが、
グラフ(散布図)中の折れ線上の任意のマーカー部分を選択すれば、その選択したマーカー部のX値及びY値をあるセルに表示させたいと考えています。

グラフはX軸が日付でデータの数は、約1000です。

1.任意のマーカー部分を選択すればをマクロの記録で行うと
 (折れ線上を選択し、選択されれば任意のマーカーをさらにクリックして記録)
  例では588番目を選択
  ActiveSheet.ChartObjects(1)Activate
  ActiveChart.SeriesCollection(1).Select
  ActiveChart.SeriesCollection(1).Points(588).Select

2.マーカー部のX値及びY値をあるセルに表示させる
 上記の558番目の値は但し、Y値のみしか解らず
  Dim tmp As Variant
  tmp = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Values
  Cells(1, 1).Value = tmp(588)

以上が色々調べて上記のことしか解らず次に進めません。

上記の1.の操作で例えば588の数値をどのようなイベントで取り得ることができるのか?

上記の1.でえられた例えば588を用いてX軸の値を取得したい
    (Y軸の値は、出来るのですが)

解りにくい説明と思いますがご教示していただければと思います。
よろしくお願いします。

【64178】Re:グラフ(散布図)中の任意に選択した...
発言  kanabun  - 10/1/23(土) 11:04 -

引用なし
パスワード
   ▼かじったばかり さん:
こんにちは。

>グラフ(散布図)中の折れ線上の任意のマーカー部分を選択すれば、その選択したマーカー部のX値及びY値をあるセルに表示させたいと考えています。

>1.任意のマーカー部分を選択すればをマクロの記録で行うと

ワークシート(Worksheet)上の埋め込みグラフには
「グラフのどこどこが選択された」とき、
発生するイベントはないんですよ。

グラフシート(Chart)ならあります。
なので、グラフシートで _Selectイベントを使って
任意の系列のPointが選択されたら、そのPointのX値及びY値を
MsgBoxなどに表示するプロシージャコードを書いて、
うまくいくようになったら、そのコードを
ワークシート上の埋め込みグラフのなかのChartに結び付ける
コードに直します
・・・というような流れになるかと思います。
キーワードは
WithEvents
です。

【64179】Re:グラフ(散布図)中の任意に選択した...
発言  kanabun  - 10/1/23(土) 11:15 -

引用なし
パスワード
   こちらが参考になるかも
ht tp://www.moug.net/tech/exvba/0020009.htm

【64180】Re:グラフ(散布図)中の任意に選択した...
発言  kanabun  - 10/1/23(土) 11:20 -

引用なし
パスワード
   もひとつ参考まで...
グラフシートで
■Chart_Selectイベントが発生したとき、
 選択されたデータ要素の項目と値を表示するには

Private Sub Chart_Select(ByVal ElementID As Long, _
          ByVal nSeries As Long, ByVal iPoint As Long)
 Dim varX As Variant
 Dim varY As Variant
 Dim Msg As String

 Select Case ElementID
  Case xlSeries     '- データ系列が選択されたとき
    With Me.SeriesCollection(nSeries)
     Select Case iPoint
      Case -1     ' --- 系列全体が選択されたとき
        Msg = .Formula
      Case Else    ' --- 特定の要素が選択されたとき
        varX = .XValues
        varY = .Values
        Msg = .Name & "(" & varX(iPoint) & ", " _
                 & varY(iPoint) & ")"
     End Select
    End With
    'MsgBox Msg    
    'ActiveWindow.Caption = Msg    
   'または
    Application.StatusBar = Msg
 End Select

End Sub

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

【64181】Re:グラフ(散布図)中の任意に選択した...
質問  かじったばかり  - 10/1/23(土) 16:59 -

引用なし
パスワード
   ▼kanabun さん:
返信遅くなりすみません。
早速ですが、引用させて動作を確認しました。
まさにやりたかったことが出来たました。
有難うございます。

ただ、
グラフシートでは上手くいくのですが、埋め込みグラフでは
下記の「←←←」の部分で
「SeriesCollectionメソッドは失敗しました。Chartオブジェクト」のエラーが表示されます。
ヘルプを見ても要領がえません。
かって申しますがご教授していただければと思っております。

Private WithEvents MyChart As Chart
'===シートActivate時===
Private Sub Worksheet_Activate()

If MyChart Is Nothing Then
  Set MyChart = ActiveSheet.ChartObjects(1).Chart
End If

End Sub

Private Sub MyChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
Dim varX As Variant
 Dim varY As Variant
 Dim Msg As String

 Select Case ElementID
  Case xlSeries     '- データ系列が選択されたとき
  Msg = "1"
    With MyChart.SeriesCollection(nSeries) ←←←

     Select Case iPoint
      Case -1     ' --- 系列全体が選択されたとき
        Msg = .Formula
      Case Else    ' --- 特定の要素が選択されたとき
        varX = .XValues
        varY = .Values
        Msg = .Name & "(" & varX(iPoint) & ", " & varY(iPoint) & ")"
     End Select
    End With
    'MsgBox Msg
    'ActiveWindow.Caption = Msg
   'または
    Application.StatusBar = Msg
 End Select

【64182】Re:グラフ(散布図)中の任意に選択した...
発言  kanabun  - 10/1/23(土) 18:24 -

引用なし
パスワード
   ▼かじったばかり さん:

>下記の「←←←」の部分で
>「SeriesCollectionメソッドは失敗しました。Chartオブジェクト」のエラーが表示されます。

パラメータの名前がちがいます

>Private Sub MyChart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)



Private Sub Chart_Select(ByVal ElementID As Long, _
          ByVal nSeries As Long, ByVal iPoint As Long)

に代えてください。

モジュールの先頭に
Option Explicitを宣言しておいてください。

★[ツール] メニューの [オプション] をクリックし、
 [編集] タブの [変数の宣言を強制する] チェックボックスをオンに
 しておきますと、以後、モジュールの先頭に
Option Explicit
 が自動で宣言されるようになります。

【64183】Re:グラフ(散布図)中の任意に選択した...
お礼  かじったばかり  - 10/1/23(土) 20:05 -

引用なし
パスワード
   ▼kanabun さん:
有難うございます。
無事作動しました。
又解らないことがあれば質問させていただきます。

3115 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free