|
▼mayu さん:
こんにちは〜
>このままでは7系列ある1つの図になってしまいます。
現状では、1つのグラフのなかに7つの系列をプロットするようなコード
になっています。
'ActiveSheetに 埋め込みグラフを1つ作成
>ActiveSheet.Shapes.AddChart.Select
'7回くりかえす
>For i = 1 To 7
'系列を追加して
> With .SeriesCollection.NewSeries
'データをセットする
> .Name = Sheets("data").Cells(1 + i, 1)
> .XValues = Sheets("data").Range(Cells(1, 2), Cells(1, 6))
> .Values = Sheets("data").Range(Cells(1 + i, 2), Cells(1 + i, 5))
> End With
>Next i
そうではなく、
Dim ws As Worksheet
Dim myLocation As Range
Dim ChtObj As ChartObject
'7回 くりかえす
>For i = 1 To 7
'グラフを置く場所と大きさをセル範囲で指定
Set myLocation = 指定のワークシート(ws)の指定のセル範囲
'その位置に埋め込みグラフ(ChartObject)を追加する
Set ChtObj = ws.ChartObjects.Add(myLocation.Left, _
myLocation.Top, _
myLocation.Width, _
myLocation.Height)
With ChtObj.Chart 'ChartObjectのなかにできたChartに対して描画処理
with .seriescollection.Add
.Name =
.XValues =
.Values =
end with
End With
>Next i
のような感じで。
なお、
> .Values = Sheets("data").Range(Cells(1 + i, 2), Cells(1 + i, 5))
のような範囲の指定の仕方は危険です。
これだと、Cellsのまえのシートが明示されてませんので、このコードを
標準モジュールに書いているときはActiveSheetが省略されていると解釈さ
れて実行されます。
"data" という名のワークシートがアクティブでないとき、このコードは
失敗します。
さらに、注意しなくてはいけないのは、
> ActiveChart
で今作成したグラフを選択してしまっていると、その時点でアクティブなシート
は、グラフ(ActiveChart) になります。Chart にはCellsプロパティは当然ないので、
> Sheets("data").Range(Cells(1 + i, 2),
は、
Sheets("data").Range(ActiveChart.Cells(1 + i, 2),
の意味になり、失敗します。
系列に範囲をセットするときは、やはり変数を用意して、
事前に系列の元データ範囲をその変数にセットしておくほうが
ベターです。
|
|