Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12739 / 76734 ←次へ | 前へ→

【69510】Re:複数の散布図を一度に作る方法について
発言  kanabun  - 11/7/26(火) 9:41 -

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



4 hits

【69481】複数の散布図を一度に作る方法について mayu 11/7/20(水) 21:35 質問
【69510】Re:複数の散布図を一度に作る方法について kanabun 11/7/26(火) 9:41 発言
【69512】Re:複数の散布図を一度に作る方法について kanabun 11/7/26(火) 10:17 発言

12739 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free