|
▼Excel大好きちゃん さん:
こんばんは。
>再びのレス、ありがとうございます。
>コードを差し替えて実行してみたのですが、
>エラーは出なくなりましたけど、何も表示されません。
>debug.print
>のところがミソなのでしょうか。わたしが素人なもので。。。
>エーーーン
あー、そうですよね、「debug.print」なんて私も勉強し始めてかなり経ってから
使い出したんだっけ!!
ちなみに
VBE(Visual Basic Editor)を開いて(これはコードを実行させておられるのでOKですよね)、Ctrl+Gで表示されるのが「イミディエイトウインドウ」です。
ここに、
>> debug.print srs.formula & "---" & r_add
の内容が表示されるんです。
コードの途中結果等が正しいか否かをチェックするときには、便利ですよ!!
>そこで、最初に頂いたコードで、エラーが出るところを
>コメントに変更して実行してみましたら、
>うまく「元データを取得できました。」(~_~)
なるほど・・・。
これは、データ範囲の領域の数がひとつのグラフですよね!!
例えば、アクティブシートのA列1行目から
A B C D
1 x y z
2 1 20 20
3 2 40 40
4 3 80 80
5 4 160 160
6 5 320 320
7 6 640 640
8 7 1280 1280
9 8 2560 2560
10 9 5120 5120
上記のセルA1からB10、さらにD1からD10をデータ範囲としてグラフ作成した場合も
何とかできないかなあ と思い、
> Set rng = Union(rng, Range(r_add))
というコードを記述したんですが・・・。
取りあえず、気になった箇所を修正しました。
でも、色々試してみるとやっぱり完全には取得は難しいですが・・。
'============================================================
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(, , , True)
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 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
もし、ご覧になられていたら再度、確認してみて下さい。
このご質問で色々と確認する事ができました。
|
|