[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.