下記プロシージャでグラフを書こうとしてますが、動作が安定しません。
マクロは別ワークブックに書き、データを収めたワークブックを開きC列とD列で散布図を描きます。埋め込みで描こうとしてます。
Sub test()
Dim xdata, ydata, DSname As String
Dim maxRow As Long
maxRow=Range("A6500").End(xlUp).Row
DSname=ActiveSheet.Name
xdata="C1:C" & maxRow
ydata="D1:D" & maxRow
Charts.Add
With ActiveChart
.ChartType=xlXYScatter
.SeriesCollection(1).XValues=Worksheets(DSname).Range(xdata) 'この行で動作不安定
.SeriesCollection(1).Values=Worksheets(DSname).Range(ydata)
.Location Where:=xlLocationAsObject, Name:=DSname
End With
With ActiveChart
.HasTitle=False
'以降は質問と関係ないので省略
End With
End Sub
注:コピー&ペーストでなく手打ちなので、スペルミスがあるかもしれません。
動作不安定と書いた行でストップします。
エラーメッセージ
実行時エラー '1004' 'SeriesCollection'メソッドは失敗しました
常にエラーになるのではなく、正常終了することもあります。不安定と書いたのはこのためです。
1 マクロ実行時に空欄のセルが選択されている場合:エラー
2 マクロ実行時に空欄でないセルが選択されている場合:正常終了
どうすれば安定するでしょうか?
No.2ベストアンサー
- 回答日時:
「マクロ実行時に空欄のセルが選択されている」→系列(Series)に操作すべきデータがない→データがない系列の操作はできない→エラーになる
たとえば、x-yでグラフデータとしては1セットなので、デフォルトではy=1がセットされている(={1})。これを削除する(新しい空のデータ系列にする)とx軸のセットをしようとしてもエラーになる、手動でやってもエラーになりますよね。
ということでしょう。
回避策
Chartの操作をする前に事前になにか1つでもデータを入れるコードを追加する。たとえば0を邪魔にならないところに入れるか、すぐ上書きされてしまうところに入れる。
というようなことか。
この回答への補足
色々試しましたが、charts.add時にどのセルが選択されてるかが大きく影響するようです。
他回答のSetSourceDataも試しましたが今度はセル空欄時に正常終了します。
回避として、どこかのセル値を変数に代入した後空欄にして、そのままグラフを描いた後セル値を元に戻すことにしました。こんなエラー、どこのURLにも書いてません。
ありがとうございます。
グラフを描く際にはxdataで列指定するのに、指定以前の初期値に影響されるということでしょうか。
意外でした。
No.4
- 回答日時:
#1です。
あくまで想像ですが、
.SeriesCollection.NewSeries
で新しいSeriesCollectionオブジェクトが生成され、これがインデックス1で参照できる訳ですが、
SeriesCollectionオブジェクトが無い状態でいきなり
.SeriesCollection(1).XValues =hoge
を実行すると、本来オブジェクトが無いというエラーになって然るべきですが、
エクセルが気を利かせて選択されているセルから生成してくれようとし、
選択セルが空だとエラーになるのではないでしょうか。
ご参考まで。
No.3
- 回答日時:
SetSourceDataでもいいかもしれません。
maxRow=Range("A6500").End(xlUp).Row
DSname=ActiveSheet.Name
xdata="C1:C" & maxRow
ydata="D1:D" & maxRow
Charts.Add
With ActiveChart
.ChartType=xlXYScatter
.SetSourceData Source:=Worksheets(DSname).Range(xdata, ydata), PlotBy:=xlColumns
.Location Where:=xlLocationAsObject, Name:=DSname
End With
あとご存知かもしれませんが
Charts.Add
でグラフシートが作成され、次に
.Location Where:=xlLocationAsObject, Name:=DSname
でワークシート上に移動しています。
これは無駄な作業になります。
.ChartObjects.Add(.Left, .Top, .Width, .Height)
とすれば最初からワークシート上に作成することが出来ます。
≪参考≫
グラフ操作関連のテクニック
http://moug.net/tech/exvba/0021.htm
この回答への補足
.Range(xdata, ydata)
セル範囲の指定ですが、並んだC列D列ならばこの方式で可能ですが、例えばX軸:C列、y軸:E列などの場合はどうやって指定するのでしょうか?
No.1
- 回答日時:
セルが空かどうかが影響してくる理由は分かりませんが、
.SeriesCollection.NewSeries
を付け加えると良い様です。ご参考まで。
Sub test()
Dim xdata, ydata, DSname As String
Dim maxRow As Long
maxRow = Range("A6500").End(xlUp).Row
DSname = ActiveSheet.Name
xdata = "C1:C" & maxRow
ydata = "D1:D" & maxRow
Charts.Add
With ActiveChart
.ChartType = xlXYScatter
'下記を加えると良い様です。
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = Worksheets(DSname).Range(xdata) 'この行で動作不安定
.SeriesCollection(1).Values = Worksheets(DSname).Range(ydata)
.Location Where:=xlLocationAsObject, Name:=DSname
End With
End Sub
ありがとうございます。
SeriesCollection.NewSeries マクロの自動記録時にはありましたが、不要かと思って削除した覚えがあります。確認します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
VBAでのエラー
-
実行時エラー3001「引数が間違...
-
なぜエラーになるのでしょうか...
-
実行時エラー -'-2147417848
-
Outlook.ApplicationをCreateOb...
-
DataGridView からの値取得に関...
-
Access マクロでのテーブル削除
-
VBS実行時エラー オブジェクト...
-
マクロでオートシェイプ内の文...
-
EXCEL VBAマクロ中断でデバッグ...
-
エクセルエラー13型が一致しま...
-
ADODB.Streamを使用してUTF-8を...
-
マクロについて教えてください...
-
なぜこんな初歩的なVBAのIf文で...
-
Invalid procedure call or arg...
-
■VBA■ SUMとAVERAGEの違い
-
JSP/サーブレットを用いたWebア...
-
VBA エラーと対策
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAがブレークモードになっ...
-
実行時エラー3001「引数が間違...
-
VBS実行時エラー オブジェクト...
-
【Excel VBA】マクロをボタンに...
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
VBSで変数の宣言はできないので...
-
VBAでのエラー
-
実行時エラー -'-2147417848
-
なぜエラーになるのでしょうか...
-
EXCEL VBAマクロ中断でデバッグ...
-
ADODB.Streamを使用してUTF-8を...
-
VBAのコードがエラーになっ...
-
Outlook.ApplicationをCreateOb...
-
VB6+SQL サーバー 2000 で 実行...
-
ExcelVBAで、ユーザー定義型は...
-
実行時エラー48発生時のDLL特定...
おすすめ情報