[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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)
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)
マルチポストは誓ってやっていません。以前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)
そこで、自分なりに考えてやってみたところ原因が判りました。
一つ目は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)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.