先日グラフ作成にて判らない事があり、教えて頂いたのですがエラーになってしまいます。引き続き教えて頂きたかったのですが、設定変更が出来ず、結局締め切ってしまいました。再度改めて質問させて下さい。

2軸の折れ線グラフの作成にて、セルA1・B1の数値を変更することにより、ワークシート上のグラフの参照位置を全て置換えるというものなのですが、
.SetSourceData Source:=ActiveSheet.・・・・
ここで(実行エラー1004、アプリ又はオブジェクトの定義エラー)どう変更すればよいのでしょうか?よろしくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1 Or Target.Column > 2 Then Exit Sub
Dim r,C1,C2 As String
Dim ch As ChartObject
Dim minRow,maxRow As Long
minRow = 50:maxRow = 100
If Range("A1").Value >= minRow And Range("A1").Value <= maxRow _
And Range("B1").Value >= minRow And Range("B1").Value <= maxRow Then
For Each ch In ActiveSheet.ChartObjects
ch.Activate
With ActiveChart
c1 = .SeriesCollection(1).Name
c2 = .SeriesCollection(2).Name
r = c1 & Range("A1").Value & ":" & c1 & Range("B1").Value & "," _
& c2 & Range("A1").Value & ":" & c2 & Range("B1").Value
.SetSourceData Source:=ActiveSheet.Range(r), PlotBy:=xlColumns
.SeriesCollection(1).Name = c1
.SeriesCollection(2).Name = c2
End With
Next
End Sub

回答の条件
  • 1人5回まで
  • 50 ptで終了
  • 登録:
  • 終了:2007/12/09 04:18:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答8件)

すべて | 次のツリー>
新しく作ってみました SALINGER2007/12/08 20:48:02ポイント2pt
Private Sub Worksheet_Change(ByVal Target As Range)
    If (Target.Row = 1 And Target.Column > 2) Or Target.Row > 3 Then Exit Sub
    Dim minRow As Long
    Dim maxRow As Long
    Dim s1, s2 As String
    Dim p1, p2 As Integer
    Dim r As String
    Dim i, j As Integer
    
    minRow = 50     '最小行を設定
    maxRow = 100    '最大行を設定
    
    If Range("A1").Value >= minRow And Range("A1").Value <= maxRow _
        And Range("B1").Value >= minRow And Range("B1").Value <= maxRow Then
        For i = 1 To ActiveSheet.ChartObjects.Count
            ActiveSheet.ChartObjects(i).Activate
            With ActiveChart
                For j = 1 To 2
                    s1 = .SeriesCollection(j).Formula
                    p1 = InStrRev(s1, ",")
                    p2 = InStrRev(s1, "!")
                    s2 = Mid(s1, p2 + 1, p1 - p2 - 1)
                    If Cells(j + 1, i).Value = "" Then
                        r = Range(Cells(Range("A1").Value, Range(s2).Column), _
                            Cells(Range("B1").Value, Range(s2).Column)).Address
                    Else
                        r = Range(Range(Cells(j + 1, i).Value & Range("A1").Value), _
                            Range(Cells(j + 1, i).Value & Range("B1").Value)).Address
                    End If
                    .SeriesCollection(j).Formula = Left(s1, p2) & r & ",1)"
                Next j
            End With
        Next
    Else
        MsgBox "正しい範囲を入力してください"
    End If
End Sub
説明 SALINGER2007/12/08 21:01:41ポイント2pt

A1に全てのグラフの範囲下|B1に全てのグラフの範囲上|

A2に最初のグラフの系列1|B2に次のグラフの系列1 |・・・・・

A3に最初のグラフの系列2|B3に次のグラフの系列2 |・・・・・

例えば、シートの左上に

50|70|
B |C |・・・
F |G |・・・

のように入力すると個々のグラフの列を自由に変更できます。

ただし、列を指定する2行目3行目は空白でも変更しないだけでエラーになりませんが、データの無い行を選択するとエラーになります。


やってることは、SeriesCollection(1).Formula で参照先を取得して、加工してまた代入することで参照先を変更するということです。系列名とかは使ってないので自由に設定もできます。

ありがとうございました。 dadan_dan2007/12/09 04:00:16

全く問題が無い時とエラーになる時の違いがまだよく判りませんが、

しばらく使わせて頂きます。

また、困った時には質問させて頂くと思いますが、よろしくお願い致します。

ありがとうございました。m(_ _)m

すべて | 次のツリー>

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません