|
▼Excel大好きちゃん さん:
おはようございます。
>皆さん、こんにちは。
>グラフの元データ範囲の取得は、どうやったらできるのでしょうか。設定については、ActiveChart.SetSourceDataメソッドでできることはわかっていますが、逆の取得方法が不明で、調べてみても私の能力ではNGでした。是非、ご教示お願い致します。
私は、普段チャートをあまり触らないので、探ってみましたが、元のデータのデータ範囲に相当するプロパティって、見つかりませんでした。
で、SeriesCollectionを調べてセルアドレスをつなげて行く方法です。
簡単なグラフ(データ範囲が同一シート内でないと失敗してしまいます)でしかテストしていませんが、確認してみて下さい。
コードは、埋め込みグラフでの例です。
'===========================================================
Sub test()
Dim cht As Chart
Dim srs As Series
Dim rng As Range
Dim r_add As String
Set cht = ActiveSheet.ChartObjects(1).Chart
Set rng = Nothing
For Each srs In cht.SeriesCollection
r_add = edit_addr(srs.Formula, srs.PlotOrder)
If r_add <> "" Then
If rng Is Nothing Then
Set rng = Range(r_add)
Else
Set rng = Union(rng, Range(r_add))
End If
End If
Next
If Not rng Is Nothing Then
MsgBox rng.Address
End If
End Sub
'=================================================================
Function edit_addr(add, podr As Long) As String
Dim ans()
wk = Split(Replace$(Replace$(add, "=SERIES(", ""), "," & podr & ")", ""), ",")
jdx = 1
For idx = LBound(wk) To UBound(wk)
If wk(idx) <> "" 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
|
|