[[20050725174254]] 『10個ずつ範囲を変えて折れ線グラフを繰り返し』(イブのパパ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『10個ずつ範囲を変えて折れ線グラフを繰り返し』(イブのパパ)

[10個ずつデータ範囲を変えて折れ線グラフを繰り返し作成する方法]

VBAの初心者です。
製品特性のデータをInternet Explorerの検索をしたときの様にコマンドボタンを押す毎に10個ずつ折れ線グラフを描きたいのです。

過去ログなど見て下記のコードを作りましたが、うまくいきません。
データはF4のセルから入っているのですが、データ取得はF14からになってしまい7行目でエラーが起こってしまいます。
どなたか教えて頂けないでしょうか?よろしくお願いします。

Sub データ範囲を換えてグラフを描く()

        Dim データ範囲 As Range
            Range("F4").Select
            Setデータ範囲 = Selection.Offset(10, 0).Resize(10, 1).Select
            Charts.Add
            ActiveChart.ChartType = xlLineMarkers
            ActiveChart.SetSourceData Source:=データ範囲, PlotBy:=xlColumns
            ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2"
    End Sub


 こんな感じかな?
Option Explicit
Sub データ範囲を換えてグラフを描く()
Dim データ範囲 As Range
Static i As Long
Dim MyChart As Chart
With Sheets("Sheet1")
    Set データ範囲 = .Range("F4").Offset(i).Resize(10)
End With
On Error Resume Next
    Set MyChart = Sheets("Sheet2").ChartObjects(1).Chart
On Error GoTo 0
If MyChart Is Nothing Then
    Charts.Add
    Set MyChart = ActiveChart
End If
With MyChart
    .ChartType = xlLineMarkers
    .SetSourceData Source:=データ範囲, PlotBy:=xlColumns
    .Location Where:=xlLocationAsObject, Name:="Sheet2"
End With
i = i + 10
If i > 30 Then i = 0
Set MyChart = Nothing
Set データ範囲 = Nothing
End Sub
(SoulMan)


SoulManさん 教えていただきありがとうございます!!!
申し訳ありませんが、あと二つお教え願えないでしょうか?

SoulManさんから教えていただいたコードで動かせてみるとデータの取得は繰り返し
上手くいくのですが、グラフを描きませんでした。自分なりに下記のように換えて何とかグラフは描くようになりました

そこで、4行目のActiveChart.SeriesCollection(1).XValues = "=Sheet2!R3C3:R13C3"
がロット番号ですが、これもデータに対応してロットのデータ範囲を換えたいのですが?

もうひとつは、30個グラフを描いたら戻るように教えていただきましたが、データがなくなったら最初に戻りたいのですが?
どうすればいいでしょうかお教え頂けなしでしょうか。

 Charts.Add
 ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=データ範囲, PlotBy:=xlColumns
    ActiveChart.SeriesCollection(1).XValues = "=Sheet2!R3C3:R13C3"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2"
i = i + 10
If i > 30 Then i = 0
Set MyChart = Nothing
Set データ範囲 = Nothing
End Sub

 すみません。グラフを作るデータはどこにあるんですか?
 >Range("F4").Select
 >Setデータ範囲 = Selection.Offset(10, 0).Resize(10, 1).Select
 私にはシートは見えませんので↑このコードだけが頼りなのです。
 このコードからするとF4から下に10シフトしたところから
 一列10段となりますが?シートを作るデータはSheet1ですか?Sheet2ですか?
(イブのパパ)さんにとっては当たり前のことなのでしょうが、私にはわかりません。 
 シートのレイアウトを教えてください。
(SoulMan)

SoulManさん 説明不足ですみません。
データはSheet2にあり、項目見出しが3行目にあります。
グラフにしたいデータはF4から対応するロット番号はC4から始まります。

  Sheet2
                 A    B    C     D   E   F   G
3行目 (項目見出し)年月日  試験No. ロットNo.  特性a  特性b 特性c 特性d

4行目 以降データ  
 
このようなレイアウトです。よろしくお願いします。


 こんな感じかな??
Option Explicit
Sub データ範囲を換えてグラフを描く()
Dim ラベル範囲 As String
Dim データ範囲 As String
Dim MyMax As Long
Static i As Long
Dim MyChart As Chart
With Sheets("Sheet2")
    MyMax = .Range("C4", .Range("C65536").End(xlUp)).Rows.Count
    ラベル範囲 = "C3,F3," & .Range("C4").Offset(i).Resize(10).Address(0, 0)
    データ範囲 = ラベル範囲 & "," & .Range("F4").Offset(i).Resize(10).Address(0, 0)
End With
On Error Resume Next
    Set MyChart = Sheets("Sheet2").ChartObjects(1).Chart
On Error GoTo 0
If MyChart Is Nothing Then
    Charts.Add
    Set MyChart = ActiveChart
End If
With MyChart
    .ChartType = xlLineMarkers
    .SetSourceData Source:=Sheets("Sheet2").Range(データ範囲), PlotBy:=xlColumns
    .Location Where:=xlLocationAsObject, Name:="Sheet2"
End With
i = i + 10
If MyMax <= i Then i = 0
Set MyChart = Nothing
End Sub
それから、失礼ですがマルチポストじゃないでしょうね?
当校はマルチポストは禁止されていませんが私はもめごとは嫌なのでね。
もしも、マルチポストでしたら以降の回答はご遠慮させて頂きますので悪しからずご了承くださいませ。
#マルチじゃなかったらごめんなさいです。m(__)m
(SoulMan)


SoulManさん ありがとうございます。
作ってもらったコードでやってみたのですが、データは取得していますがグラフを
描いてくれません。
また、データ取得の最初がC14:C23とF14:F23になっています。
何度もお聞きして申し訳ありませんがよろしくお願いします。

マルチポストは誓ってやっていません。以前Accessで一度質問したことがありますが、
Excelでは今回が初めてです。


 うぅ〜〜ん、、困ったね(^^;
 >データ取得の最初がC14:C23とF14:F23になっています。
 そんなことはないと思うけど、、、?
 不思議なのが↑こんな風に書けるのなら、なぜ?
 データ範囲は「なん番地」です
 と書けないんでしょうね? 
 私が鈍感なだけかもしれませんが、最初の
 >Range("F4").Select
 >Setデータ範囲 = Selection.Offset(10, 0).Resize(10, 1).Select
 これから、シートのレイアウトを聞いて想像出来なかったけど、
 マクロとか関係なしで「どのデータ範囲」でグラフを作るのですか?
 ある程度は、関連のある番地なんでしょうね? 
 こちらこそ、よろしくお願いします。m(__)m
http://ryusendo.no-ip.com/cgi-bin/upload/src/up0333.xls
私は、こんな感じかな?と思っているのですが、違いますか?
(SoulMan)

SoulManさん表まで作って頂きありがとうございました。
それなのに、返事がたいへん遅れてしまい申し訳ありませんでした。
Soulmanさんの作ってもらったものは思いどうりにちゃんと動きます。
しかし、自分の作ったSheetにコピーすると以前と同じような現象になりました。

そこで、自分なりに考えてやってみたところ原因が判りました。
一つ目は6桁のロット番号の最初の文字が9であるので数値として入力していました。最初の文字が0の時は文字列で入力していました。この書式の違いにより上手くデータ取得が出来なかったようです。
二つ目はグラフは作成されているのですが、グラフがA1セルの上に瞬間的に移動しハンドル3つだけが見えている状態でした。グラフを広げるとちゃんと10個づつ表示しました。
対策として一つ目はロット番号を文字列に変更することでいけますが、グラフエリアを指定する方法がわかりません。
何度もお聞きして申し訳ありませんが教えていただけませんか。


 グラフは実際に作りたいグラフを記録されるのがいいと思いますよ?
H3からL20の範囲にグラフを作る場合です。ほとんど記録のまんまですからね。
後は、応用してください。
Option Explicit
Sub データ範囲を換えてグラフを描く()
Dim ラベル範囲 As String
Dim データ範囲 As String
Dim グラフ範囲 As Range
Dim MyChart As ChartObject
Dim MyMax As Long
Static i As Long
With Sheets("Sheet2")
    MyMax = .Range("C4", .Range("C65536").End(xlUp)).Rows.Count
    ラベル範囲 = "C3,F3," & .Range("C4").Offset(i).Resize(10).Address(0, 0)
    データ範囲 = ラベル範囲 & "," & .Range("F4").Offset(i).Resize(10).Address(0, 0)
    Set グラフ範囲 = .Range("H3:L20")
    On Error Resume Next
        Set MyChart = .ChartObjects(1)
    On Error GoTo 0
    If MyChart Is Nothing Then
        Set MyChart = .ChartObjects.Add( _
        グラフ範囲.Left, グラフ範囲.Top, グラフ範囲.Width, グラフ範囲.Height)
    End If
End With
With MyChart.Chart
    .ChartType = xlLineMarkers
    .SetSourceData Source:=Sheets("Sheet2").Range(データ範囲), PlotBy:=xlColumns
    .PlotArea.Width = 250
    .PlotArea.Height = 200
    .Axes(xlCategory).TickLabels.Font.Size = 6
End With
i = i + 10
If MyMax <= i Then i = 0
Set MyChart = Nothing
Set グラフ範囲 = Nothing
End Sub
(SoulMan)


SoulManさん 旅行に行っていたので返事が遅くなりすみませんでした。
教えて頂いたもので思っていたとおりに動きました。
何度も教えていただきありがとうございました。
教えて頂いたことを元にプログラムを組もうと思いますが、
分からなくなったらまたよろしくお願いします。
(イブのパパ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.