「これはヤバかったな」という遅刻エピソード

エクセルで散布図をX軸=時間, Y軸=ある値で作成しています。

グラフ上の点を2度クリックすると点が選択できますが、この状態で選択されている
点のX(=時間)をマクロで取得することは可能でしょうか?

目的は『グラフ上で選択している点を選択し、その前後数秒に含まれる点のY値の平均値算出
』を自動化するためです。

ちなみに、点を選択した状態でデバッグモードでマクロを動かし、 Selection (Type Pointでした)のプロパティの中身を見てみましたがX値やY値だと思われる値を見つけることができませんでした。

A 回答 (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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご教授いただいた『test2()』を少し変更するだけで、意図するマクロが作成できそうです。

また、『test()』ですが私の環境(Excel2000)では、
.ApplyDataLabels ShowCategoryName:=Trueのところでコンパイルエラーが発生したため、
http://msdn.microsoft.com/ja-jp/library/microsof …
を参考に、以下に変更することで実行できました。
.ApplyDataLabels Type:=xlDataLabelsShowLabel

ありがとうございました。

お礼日時:2011/03/09 20:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!