[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『グラフにおける「SeriesクラスのXvaluesプロパティを設定できません。」エラー』 (まき)
エクセル:2003、 Vista
いつも色々参考にさせて頂いております。過去の事例も少なく解決に至らなかったので、 ご指導お願い致します。
現在、元ファイルと言うグラフを作る為のシートから、別bookにコピーして条件に応じて グラフを作り直そうとしています。そこで、次の様なVBAをマクロの記録で作りました。
Windows(ファイル名).Activate
Sheets("空グラフ").Select
ActiveSheet.ChartObjects("グラフ 1").Activate
'↓ここでエラー
ActiveChart.SeriesCollection(1).XValues = "=グラフdata!R2C1:R162C1"
ActiveChart.SeriesCollection(1).Values = "=グラフdata!R2C2:R162C2"
ActiveChart.SeriesCollection(1).Name = "=グラフdata!R1C2"
ActiveChart.SeriesCollection(2).XValues = "=グラフdata!R2C3:R38C3"
ActiveChart.SeriesCollection(2).Values = "=グラフdata!R2C4:R162C4"
ActiveChart.SeriesCollection(2).Name = "=グラフdata!R1C4"
ActiveChart.SeriesCollection(3).XValues = "=グラフdata!R2C3:R38C3"
ActiveChart.SeriesCollection(3).Values = "=グラフdata!R2C6:R162C6"
ActiveChart.SeriesCollection(3).Name = "=グラフdata!R1C6"
ActiveWindow.Visible = False
条件と言ってもRowの値を伸ばしたり、短くするだけです。(参考にROW162で)しかし、 「実行時エラー'1004': SeriesクラスのXvaluesプロパティを設定できません。」で 最初からエラーで止まってしまいます。ためにし、次の通りでもメソッドをサポート しておりませんで止まってしまいます。
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection(1) = "=SERIES(グラフdata!$B$1,グラフdata!$A$2:$A$627,グラフdata!$B$2:$B$162,2)"
もう何が悪いのか??でお手上げです。大変申し訳ございませんが、ご指導の程お願い 申し上げます。
自己レスです。
ファイルを自宅に持ってくるのを忘れ、その上2007で次の様な簡易dataを単品bookに張り動かした 所、何も無かった様に動作しました。その上、セルには空データーも含まれています。ちなみに、 会社ではSeriesCollection(1)だけでも確認したのに駄目でした? 会社ではオリジナルファイルからコピーして、コピーしたシートで動かしたからか、それとも2007と 2003の違いなのか?
Sub ボタン1_Click()
Sheets("空グラフ").Select
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select 'これは上では記載忘れですが、実際には入ってます
'2007でシートをコピーしないダミーでは↓ここでエラーにならない?
ActiveChart.SeriesCollection(1).XValues = "=グラフdata!R2C1:R162C1"
ActiveChart.SeriesCollection(1).Values = "=グラフdata!R2C2:R162C2"
ActiveChart.SeriesCollection(1).Name = "=グラフdata!R1C2"
End Sub
よろしくお願い申し上げます。
ActiveSheetやActiveChartとはしないで
↓の様に直接指定してしてみてはどうですか?
Option Explicit
Sub ボタン1_Click()
With Sheets("空グラフ").ChartObjects("グラフ 1").Chart
.SeriesCollection(1).XValues = "=グラフdata!R2C1:R162C1"
.SeriesCollection(1).Values = "=グラフdata!R2C2:R162C2"
.SeriesCollection(1).Name = "=グラフdata!R1C2"
End With
End Sub
(SoulMan)
SoulMan 様
お返事有り難うございました。早速下記の様にVBAを変更し実行した所、「実行エラー'438'オブジェク トは、このプロパティまたはメソッドをサポートしていません。」とwithの次の行から(with内)でエラ ーが発生します。ちなみに、withで閉じなかったのは、マクロの記録で作ったからです。
Sheets("空堀グラフ").Select
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select
With ActiveChart.PlotArea
.SeriesCollection(1).XValues = "=グラフdata!R2C1:R162C1"
.SeriesCollection(1).Values = "=グラフdata!R2C2:R162C2"
.SeriesCollection(1).Name = "=グラフdata!R1C2"
.SeriesCollection(2).XValues = "=グラフdata!R2C1:R162C1"
.SeriesCollection(2).Values = "=グラフdata!R2C2:R162C2"
.SeriesCollection(2).Name = "=グラフdata!R1C2"
.SeriesCollection(3).XValues = "=グラフdata!R2C1:R162C1"
.SeriesCollection(3).Values = "=グラフdata!R2C2:R162C2"
.SeriesCollection(3).Name = "=グラフdata!R1C2"
End With
所で最初に書き出したVBAをそのまま、エクセル2007(XP)で実行すると動作します。グラフで2003と2007 で大きく違う事って有るのでしょうか?(他のサイトでやはり2007で動いて2003で動かないと言うのを 読んだ気がします。)
以上よろしくお願い申し上げます。
あのぅ、、、
ActiveSheetやActiveChartとはしないで
↓の様に直接指定してしてみてはどうですか?
With Sheets("空堀グラフ").ChartObjects("グラフ 1").Chart
.SeriesCollection(1).XValues = "=グラフdata!R2C1:R162C1"
.SeriesCollection(1).Values = "=グラフdata!R2C2:R162C2"
.SeriesCollection(1).Name = "=グラフdata!R1C2"
.SeriesCollection(2).XValues = "=グラフdata!R2C1:R162C1"
.SeriesCollection(2).Values = "=グラフdata!R2C2:R162C2"
.SeriesCollection(2).Name = "=グラフdata!R1C2"
.SeriesCollection(3).XValues = "=グラフdata!R2C1:R162C1"
.SeriesCollection(3).Values = "=グラフdata!R2C2:R162C2"
.SeriesCollection(3).Name = "=グラフdata!R1C2"
End With
>所で最初に書き出したVBAをそのまま、エクセル2007(XP)で実行すると動作します。グラフで2003と2007
で大きく違う事って有るのでしょうか?
それはあるでしょう。
(SoulMan)
レスが遅れてすいませんでした。また、私の説明不足もありごめんなさい。最初にSoulMan様から教えて
頂いた通りペースとした所、エラー(内容が忘れましたが)が出た為に、(確かwithの行で止まった)
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select
With ActiveChart.PlotArea
と書き直しました。
今回3軸グラフをマクロで作りたく、コピー前ファイルにSheets("空堀グラフ")に2軸と3軸の目盛を
セルに書いており、Sheets("グラフdata")に値を入れると(3軸行は2軸の変数を使い)Sheets("空堀
グラフ")に3軸グラフが出来る様にしていました。コピー前ファイルからSheets("空堀グラフ")と
Sheets("グラフdata")をコピーした後に、コピー先のSheets("グラフdata")にcsvファイルをペースト
するマクロになっています。コピーした方のシートのグラフ系列を見ると、
[元ファイル名]グラフdata!R2C1:R162C1
となっている為に、(憶測ですが)
ActiveChart.SeriesCollection(1).Select
が出来ませんでした。そこで、元ファイルでSeriesCollection(1〜3)のグラフ系列を外し、コピー先にcsv
を代入した後、2軸のdataを1軸で代入後2軸に変更した所(過去の質問にも有りましたが)目的通り
の描画が出来ました。参考までに本VBAは、次の通りです。
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.ChartArea.Select
'dataの代入後 第1軸
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=グラフdata!R2C1:R162C1"
ActiveChart.SeriesCollection(1).Values = "=グラフdata!R2C2:R162C2"
ActiveChart.SeriesCollection(1).Name = "=グラフdata!R1C2"
ActiveChart.SeriesCollection(1).Select
With Selection.Border
.ColorIndex = 14 '緑色は14番
.Weight = xlThin
.LineStyle = xlContinuous
End With
With Selection
.MarkerBackgroundColorIndex = xlAutomatic
.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlNone
.Smooth = False
.MarkerSize = 5
.Shadow = False
End With
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 8
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlCustom
.CrossesAt = 8
.ReversePlotOrder = True
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
'回転の代入(第二軸グラフ)
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select
i = 2
Do Until i = 4
ActiveSheet.ChartObjects("グラフ 1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection.NewSeries
グラフ範囲 = "R2C" & 2 + ((i - 1) * 2) & ":R162C" & 2 + ((i - 1) * 2) & ""
グラフタイトル = "R1C" & 2 + ((i - 1) * 2) & ""
ActiveChart.SeriesCollection(i).Values = "=グラフdata!" & グラフ範囲
ActiveChart.SeriesCollection(i).Name = "=グラフdata!" & グラフタイトル
ActiveChart.SeriesCollection(i).Select
'第二軸グラフに変更
With Selection.Border
If i = 2 Then
.ColorIndex = 53 '回転の茶色は53番
End If
If i = 3 Then
.ColorIndex = 5 '傾の青色は5番
End If
.Weight = xlHairline
.LineStyle = xlContinuous
End With
With Selection
.MarkerBackgroundColorIndex = xlAutomatic
.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlNone
.Smooth = False
.MarkerSize = 5
.Shadow = False
End With
ActiveChart.SeriesCollection(i).AxisGroup = 2
ActiveChart.Axes(xlValue, xlSecondary).Select
With Selection
.MajorTickMark = xlNone
.MinorTickMark = xlNone
.TickLabelPosition = xlNone
End With
'第2軸設定
With ActiveChart.Axes(xlValue, xlSecondary)
.MinimumScaleIsAuto = True
.MinimumScale = 0
.MaximumScale = 60 '2軸のHIを60にする
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
i = i + 1
Loop
何かグラフのマクロは分かりにくいです。まだデバッグが必要ですが、2007でも動きましたが。。。 この度は、私の説明不足でSoulMan様にお時間を使わせてしまい、大変申し訳ございませんでした。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.