自分しか見ないのであれば不要(?)かもしれませんが、他の人にコードを見てもらう場合はコードをきれいにしましょう。
特にネストしている部分のインデントが正しく揃っていないと、ループ範囲やIF~ENDIFの範囲を見誤りやすく、バグの温床にもなってしまいます。
人に見せる場合は必要に応じて説明のコメントもあるとなおよいです。
Sub GrapfGT()
Dim op As Worksheet, sn As Worksheet, i As Integer
Set op = Workbooks("CAB-Grapf.xls").ActiveSheet
Application.ScreenUpdating = False
'グラフ作成
ActiveSheet.ChartObjects.Add 100, 100, 600, 200
ActiveSheet.ChartObjects(1).Chart.ChartType = xlXYScatterSmooth
'データ取得ループ
For i = 1 To op.Range("H1").Value
If i > 10 Then
MsgBox "データーがそんなにないよ(V)o¥o(V)"
Exit For
End If
'グラフにデータソースを設定
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Sheets(op.Cells(2 + i - 1, "B").Value).Select.Range("A1014:A3014, B1014:3014")
Next
End Sub
アドバイス
今回やりたいことがいまいち掴めません。
データシート毎に新しいグラフを作り、それらを重ねておきたいのかと思いましたが、グラフはループ外で1回しか作成していませんし、データソースも毎回ChartObjects(1)にセットしているようです。
これでは最後にセットしたデータソースが最終的にグラフ表示されているのではないかと思います。
こちらの手元には都合よくグラフ化できるデータソースがないので検証はできていませんが、データシート毎にグラフを作成したいのなら以下のようになると思います。
Sub GrapfGT()
Dim op As Worksheet, sn As Worksheet, i As Integer
Dim cht As ChartObject
Dim rng As Range
Set op = Workbooks("CAB-Grapf.xls").ActiveSheet
Application.ScreenUpdating = False
'データ取得ループ
For i = 1 To op.Range("H1").Value
If i > 10 Then
MsgBox "データーがそんなにないよ(V)o¥o(V)"
Exit For
End If
'グラフ作成
Set cht = ActiveSheet.ChartObjects.Add(100, 100, 600, 200)
cht.Chart.ChartType = xlXYScatterSmooth
'データ範囲の取得
Set rng = Sheets(op.Cells(2 + i - 1, "B").Value).Range("A1014:A3014, B1014:3014")
'グラフにデータソースを設定
cht.Chart.SetSourceData Source:=rng
Next
End Sub
なお、グラフが表示されないだけでエラーとなっているわけではないようなのでソースを掲載する際のコピペミスだと思いますが、Sheets(~).Select
はシート選択するメソッドです。
このメソッドに対しSheets(~).Select.Range(~)
とセル範囲指定することはできないと思いますので、サンプルではSheets(~).Range(~)
と変更させていただきました。
参考になりますでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/26 05:21