|
ichinose さん
おはようございますー(~_~)
早速のご教示、ありがとうございます。
今、頂いたコードを埋め込みグラフの存在するシートをアクティブにして実行してみたのですが、
Set rng = Union(rng, Range(r_add))
のところで、メソッド失敗というエラーが出て、止まってしまいました。
やり方が悪いのでしょうか?
どうもすみませんー
>▼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
|
|