[[20040602163036]] 『グラフのデータ範囲が可変の場合』(ウメ吉) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『グラフのデータ範囲が可変の場合』(ウメ吉)

棒グラフをマクロで自動作成したいのですが、
データ範囲を指定する時、

 ActiveChart.SetSourceData Source:=Sheets("シート").Range("D2:K7")

A1形式ではなく、可変で指定したいのでcellsを使いたいのですが

 ActiveChart.SetSourceData Source:=Sheets("シート").Range(Cells(1,1),Cells(2,2))

のように指定してみましたがエラーになってしまいます。

解決法を教えてくださいm(__)m
お願いします。・゚゚・(>_<)・゚゚・。


 > エラーになってしまいます
 エラーったって山ほどあるのです、どうなるのか言ってもらわないと答えられません。

 ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(Cells(2, 4), Cells(7, 11))

 少なくとも↑これで、問題なく動きますよ。
 私の環境では[シート]だと実行時エラー9 インデックスが有効範囲にありません。

(kazu)


 昨夕、グラフ作成を自動記録でチョットし試してみたのですが、

 Sub Graph()
     Charts.Add
         ActiveChart.ChartType = xlLineMarkers
         ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("D2:K7")     '←
         ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
 End Sub

 これで、きちんと作ってくれますが、

 	=Sheets("Sheet1").Range(Cells(2, 4), Cells(7, 11))

 これだと
 [実行時エラー 1004  Cellメソッドは失敗しました:Globalオブジェクト]
 のエラーが出ます。
 グラフの作成場所を、グラフウィザード 4/4 のところで [新しいGraphシート] に作ろうとして
 エラーになるような気がします。
 新しいグラフシートを挿入したところで止まってます。
 意味...わかりません。

 わたしのおんぼろ参考書では、
 SetSourceDataメソッドは Range("A1:D10") で指定。 としか書いてませんね。  (jun53)

 すいません、例文の作り方がおかしかったですね。
丁度、シート名をSheet1から"シート"に変えて作っていたものですから
あんな例文になっていました。
jun53さんと同じエラーです。
私の参考書にもA1形式で指定の方法しか書いていないのです。
やはり、可変はムリなのでしょうか?  (ウメ吉)


横から失礼します。

 Private Sub Graph()
  Dim mydate As Range

  Range(Cells(1, 1), Cells(6, 12)).Select  'セル範囲を選択する

    Set mydate = ActiveCell.CurrentRegion   '選択されたセル範囲
    Charts.Add                          '新しいグラフの追加
    With ActiveChart
        .SetSourceData Source:=mydate, PlotBy:=xlColumns
                             'データ範囲を設定
        .ChartType = xlColumnClustered
    End With
End Sub

と書いたらできないでしょうか?? (maki)


 シート指定すれば動くようです (りな)

 Sub Graph()
     Charts.Add
     ActiveChart.ChartType = xlLineMarkers
     ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Sheets("sheet1").Cells(2, 4), Sheets("sheet1").Cells(7, 11))
     ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
 End Sub

 もう、解決済みの様ですが、出来たと思うので少しお邪魔します。
 グラフ範囲可変の件ですが、チェンジイベントを使えば出来るみたいです。
 二つ作ってみました。

 一つは棒グラフでデータの範囲が
 B2   C2  D2   E2   F2
 1月 2月 3月 4月 5月
 120  130  140  150  160
 150  170  190  210  230 
 の時A1の値で変化します。入力出来るのは
 2から6の数字です。

 Private Sub Worksheet_Change(ByVal Target As Range)

 Dim X As Integer

 If Target.Count > 1 Then Exit Sub

 If Target.Address <> "$A$1" Then Exit Sub

 If Target.Value > 6 _
 Or Target.Value < 2 Then Exit Sub

 Application.ScreenUpdating = False

 Application.EnableEvents = False

 X = Target.Value

 Me.ChartObjects("グラフ 1").Chart.SetSourceData Source:= _
 Range(Cells(2, 2), Cells(4, X)), PlotBy:=xlRows

 Target.Offset(1).Select

 Application.ScreenUpdating = True

 Application.EnableEvents = True

 End Sub

 もう一つは二系列の棒グラフで作成し
 系列2を折れ線グラフにしたもので
 デーダの範囲が同じくB2からF4です。
  B1   C1  D1   E1   F1
 1  1  1  1
 2 1月 2月 3月 4月 5月
 3 120  130  140  150  160
 4 120  130  140  

 B4=IF(B1="","",B3)と入力して
 B1からF1が空白かで
 B4からF4を表示させる様にしています。

 上の図の場合E1に何か入力するとE4に150と表示されて

 折れ線グラフの範囲が動きます。

 Private Sub Worksheet_Change(ByVal Target As Range)

 Dim X As Integer

 If Target.Count > 1 Then Exit Sub

 If Intersect(Target, Range("B1:F1")) Is Nothing Then Exit Sub

 Application.ScreenUpdating = False

 Application.EnableEvents = False

 X = Application.WorksheetFunction.Count(Range("B4:F4"))

 Me.ChartObjects("グラフ 1").Chart.SeriesCollection(2).Values = _
 Range(Cells(4, 2), Cells(4, 1 + X)).Value

 Target.Offset(1).Select

 Application.ScreenUpdating = True

 Application.EnableEvents = True

 End Sub

 実は、私も仕事で必要になっただけでしたぁ^^;
 お邪魔しました。 (koko)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.