質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2035閲覧

折れ線グラフのデータ範囲を変更する際の書き方について

DreamTheater

総合スコア1095

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/06/17 01:28

編集2020/06/17 02:51

質問概要

EXCELシート上に作成した折れ線グラフのデータ範囲を変更するVBAを作成しております。
データ系列の範囲を変更するVBAコードで不明な点があり質問させて頂きました。

シートの構成

■Sheet1
折れ線グラフの元となるデータが時系列行方向に存在します。

A(日付)B(系列1)C(系列2)
2020/06/0110005.0
2020/06/0210055.0
2020/06/0310305.1

■Sheet2
折れ線グラフオブジェクト(グラフ1)が存在します。

系列範囲の変更

系列1と2をそれぞれSheet1のB列、C列の任意の範囲に変更するVBAコードを
先ずマクロの記録で取得してみました。

VBA

1'マクロの記録で取得したコード 2 ActiveSheet.ChartObjects("グラフ 1").Activate 3 ActiveChart.FullSeriesCollection(1).Select 4 Application.CutCopyMode = False 5 ActiveChart.FullSeriesCollection(1).Values = "=Sheet1!$B$2:$B$1263" '系列1の範囲 6 ActiveChart.FullSeriesCollection(2).Values = "=Sheet1!$C$2:$C$1263" '系列2の範囲

系列1と2の範囲を任意に書き換えて動作することは確認できましたが、ActiveSheetやActiveChartを
使用したくなかったので、以下のように書き換えて実行すると実行時エラーとなりました。

VBA

1''ActiveXXXを書き換え 2''dataRange1とdataRange2にそれぞれ、=Sheet1!$B$2:$B$1263 と =Sheet1!$C$2:$C$1263 が 3''設定されています。(Debbug.Printで確認済) 4 With ThisWorkbook.Sheets("Sheet2") 5 .ChartObjects("グラフ 1").FullSeriesCollection(1).Values = dataRange1 '実行時エラー発生ステップ 6 .ChartObjects("グラフ 1").FullSeriesCollection(2).Values = dataRange2 7 End With

エラーメッセージ

実行時エラー'438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。

質問事項

  1. ActiveSheet.ChartObjects("グラフ1")は、

ThisWorkbook.Sheets("Sheet2").ChartObjects("グラフ1")と等価。
0. 同様にActiveChart.FullSeriesCollection(1).Valuesは、
ThisWorkbook.Sheets("Sheet2").ChartObjects("グラフ1").FullSeriesCollection(1).Valuesと等価。

と考えましたが、なぜエラーが発生し、どこに誤りがあるかわかりません。
原因を教えて頂けないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

外していたらゴメンナサイ。
もしかして、
ThisWorkbook.Sheets("Sheet2").ChartObjects("グラフ1").Chart.FullSeriesCollection(1).Values
のように、ChartObjects(id)の後にChartが必要だったりしますか?

ちなみに、いつも私は、以下のようにオブジェクトを変数で受けるようにしています。

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")



このようにすると、どの変数のメンバが間違っているかが分かりやすいです。

投稿2020/06/17 07:46

kenshirou

総合スコア772

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DreamTheater

2020/06/17 23:07

kenshirouさんありがとうございました! エラーなく系列データ範囲の変更ができました。 Chartオブジェクトを経由する必要があったとは、、、 仰る通り、一旦Worksheetオブジェクトに代入して、アシストを頼った方が間違いにくいですね。 アドバイスもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問