[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『グラフのデータ範囲が可変の場合』(ウメ吉)
棒グラフをマクロで自動作成したいのですが、
データ範囲を指定する時、
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.