| 
    
     |  | ▼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),
 の意味になり、失敗します。
 系列に範囲をセットするときは、やはり変数を用意して、
 事前に系列の元データ範囲をその変数にセットしておくほうが
 ベターです。
 
 
 
 
 |  |