|
▼nogu さん:
おはようございます。
>
>色々なデータをグラフにしています。
>グラフの種類は、散布図や折れ線です。
>
>データからグラフにするマクロは試行錯誤で出来ています。
>しかしグラフを作成した後、異常がある点を元のデータから削除したいのです。
>何故かというと異常があると他のデータのグラフのマーカーや線が見えなくなるからです。
>
>こんな方法はできるのでしょうか??
>グラフ上で異常点をクリックすると元のデータがアクティブになる。
>
>【完成した散布図】
>│ ×←1. この部分をクリック(Wクリック)すると
>│
>│
>│ ××
>│× ××
>│×××
>│××
>│
>└──────────
>
>【元のデータ】
>青 赤 黄 緑
>2 3 5 4
>3 2 4 12←2.元のデータをアクティブにする
>4 2 3 5
>
>異常を探す定義は特になく、グラフをかいて(視覚的にとらえて)から
>データを削除する方法を希望としています。
>よろしくお願いいたします。
以下のようなコードで可能ですが、
系列の選択後、ポイントのダブルクリックというオペレーティングに
なってしまうので操作性がよいとは言えません。
グラフは、ワークシートに貼り付けたグラフ、
つまり、チャートオブジェクトを対象としています。
Thisworkbookのモジュールに
'========================================================
Private WithEvents evchart As Chart
'========================================================
Sub set_chart()
Set evchart = ActiveSheet.ChartObjects(1).Chart
End Sub
'========================================================
Private Sub evchart_BeforeDoubleClick(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)
Dim srs As Series
Dim srsstr As Variant
Dim addr As Variant
If ElementID = xlSeries Then
Set srs = evchart.SeriesCollection(Arg1)
srsstr = Split(edit_addr(srs.Formula, srs.PlotOrder), ",")
addr = srsstr(UBound(srsstr))
Application.Range(addr).Parent.Activate
If Arg2 > 0 Then Application.Range(addr).Cells(Arg2).Activate
End If
Cancel = True
End Sub
'========================================================
Function edit_addr(add, podr As Long) As String
Dim idx As Long, jdx As Long
Dim ans()
Dim wk As Variant
wk = Split(Replace$(Replace$(add, "=SERIES(", ""), "," & podr & ")", ""), ",")
jdx = 1
For idx = LBound(wk) To UBound(wk)
If TypeName(Application.Evaluate(wk(idx))) = "Range" Then
ReDim Preserve ans(1 To jdx)
ans(jdx) = wk(idx)
jdx = jdx + 1
End If
Next
If jdx > 1 Then
edit_addr = Join(ans(), ",")
Else
edit_addr = ""
End If
End Function
対象グラフが存在するワークシートをアクティブにした状態で
上記プロシジャーのset_chartを実行してください。
実行後、グラフの変更したいプロットをダブルクリックしてください。
当該セルがアクティブになります。
確認してください。
|
|