• ベストアンサー

エクセルの散布図で選択しているポイント値取得

エクセルで散布図をX軸=時間, Y軸=ある値で作成しています。 グラフ上の点を2度クリックすると点が選択できますが、この状態で選択されている 点のX(=時間)をマクロで取得することは可能でしょうか? 目的は『グラフ上で選択している点を選択し、その前後数秒に含まれる点のY値の平均値算出 』を自動化するためです。 ちなみに、点を選択した状態でデバッグモードでマクロを動かし、 Selection (Type Pointでした)のプロパティの中身を見てみましたがX値やY値だと思われる値を見つけることができませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>点のX(=時間)をマクロで取得することは可能でしょうか? Sub test()   If TypeName(Selection) = "Point" Then     With Selection       .ApplyDataLabels ShowCategoryName:=True       MsgBox .DataLabel.Text       .HasDataLabel = False     End With   End If End Sub こんな感じでDataLabelを一旦表示させて取ります。 >その前後数秒に含まれる点のY値の平均値算出.. 微妙に意図が違うかもしれませんが、 以下は前後『数秒』ではなく前後の要素数の平均を取るサンプルです。 Sub test2()   Const g As Long = 5 '前後の要素数   Dim s  As String  'DataLabel.Name文字列   Dim v  As Variant '系列のy値   Dim idx As Long   '選択した要素のindex   Dim mn As Long   '前要素index   Dim mx As Long   '後要素index   Dim i  As Long   'Loopカウンタ   Dim sum As Double  '集計用   If TypeName(Selection) = "Point" Then     With Selection       .HasDataLabel = True       s = .DataLabel.Name       .HasDataLabel = False       v = .Parent.Values     End With     idx = Val(Mid$(s, InStrRev(s, "P") + 1))     mn = Application.Max(1, idx - g)     mx = Application.Min(UBound(v), idx + g)     For i = mn To mx       sum = sum + v(i)     Next     MsgBox "要素 " & idx & vbLf & mn & " - " & mx & vbLf & _         "Ave. " & sum / (mx - mn + 1)   End If End Sub

1000gou
質問者

お礼

回答ありがとうございます。 ご教授いただいた『test2()』を少し変更するだけで、意図するマクロが作成できそうです。 また、『test()』ですが私の環境(Excel2000)では、 .ApplyDataLabels ShowCategoryName:=Trueのところでコンパイルエラーが発生したため、 http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.point.applydatalabels%28v=Office.11%29.aspx を参考に、以下に変更することで実行できました。 .ApplyDataLabels Type:=xlDataLabelsShowLabel ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A