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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

2回答

26651閲覧

VBA SeriesCollectionについて

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

2クリップ

投稿2015/09/11 02:48

【使用環境】
Windows 7 Professional 32bit
Excel 2010

【内容】
散布図グラフ内にseries関数を使用したマーカーを配置し、マーカーにはラベルがついています。
そのラベルの削除と再設定を行う動作をExcel上の「マクロの記録」を使い記録し、
そのままVBAで使用しようとしたところ、「実行時エラー1004 パラメーターが無効です」と表示されてしまいます。
マクロの記録で生成されたVBAのコードをそのまま使用してエラーが出てしまう原因は何なのでしょうか?
(そのまま使うのはよろしくないことは把握しております。動作さえ確認できれば内容を適切に書き換えて使用したいと考えております。)

以下、コードです。

Sub テスト用()

Sheets("6").Select
ActiveSheet.ChartObjects("グラフ 13").Activate
ActiveChart.SeriesCollection(6).DataLabels.Select
Selection.Delete
ActiveSheet.ChartObjects("グラフ 13").Activate
ActiveChart.SeriesCollection(6).Select
ActiveChart.SeriesCollection(6).ApplyDataLabels
ActiveChart.SeriesCollection(6).DataLabels.Select
Selection.ShowSeriesName = True
Selection.ShowValue = False

End Sub

皆様のお力をお貸しいただければ幸いです。

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

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

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

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

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

mie

2015/09/11 04:40

マクロの記録で作成したマクロでエラーが出ることは度々あります(特にグラフ回り)。 Excel2007で添付のマクロを実行してみましたが、エラーは出ませんでした。 Editor で1行ずつ実行して、どのメソッドでエラーが出るのか確認してみてください。
guest

回答2

0

シート内に同名のオブジェクトが存在するとゲスト様のようなエラーが出るようです。
今一度シート内に同名オブジェクトが存在しないか確認してみてはいかがでしょうか。
解決に至らなかったら申し訳ございません。

投稿2015/09/11 06:25

Alice0225

総合スコア206

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

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

0

今、確認できる環境が無いので、外していたらゴメンなさい。

取り敢えず以下のように修正して動くか試して頂けますか?

Select
Active~

Selectは止めて
対象のオブジェクトを明示的に指定


<2015/09/12 09:45 追記>

すみません、遅くなりました。そして、ポイントがズレていましたね…

###エラーの直接原因
確認した環境は違いますが(Excel2013)、エラーの直接の原因は多分この部分だと思います。

誤)ActiveChart.SeriesCollection(6).DataLabels.Select 正)ActiveChart.Chart.SeriesCollection(6).DataLabels.Select

Excelのオブジェクトモデルはとても複雑で、私もいつも混乱してしまう(マクロの記録の結果を利用する場合は特に)のですけれども、Excelのオブジェクトモデルに立ち返って考えてみるのが近道だと思います。

###理解のカギ
まず、スタートとなる知識は『ブック内のグラフは Chartメンバー によって表される』ということです。
Chartメンバーの詳細についてはこちらを参照。SeriesCollectionオブジェクトについてはこちらをどうぞ)

そして、SeriesCollectionオブジェクトを利用するためには、ますオブジェクトを取得する必要がある訳ですが、そのためには ActiveChart.Chart.SeriesCollection と書きます。

その意味を自分なりの言葉で 意訳 してみると

ActiveChart.Chart.SeriesCollection の意味
現在アクティブになっているグラフ ActiveChart
Chart メンバー(グラフそのものを表す)の SeriesCollection プロパティを指定して
SeriesCollections コレクション(SeriesCollectionオブジェクトの集合)を取得する

今の場合は ActiveChart.Chart.SeriesCollection(6) となっているので、実際には SeriesCollections コレクション のうちの6番目のメンバーである SeriesCollection オブジェクト が1つ取得されることになります。

# 多分、一番の混乱の元になっているのは、同じ綴りの単語でも使用される文脈によって、メンバープロパティメソッドオブジェクト など、異なるものを指している場合があるからだと思います。
# ちなみに、オブジェクトの集合であるコレクションは、オブジェクトの複数形になっているので、まだ比較的分かりやすいですけれども…

###マクロの記録を利用するコツ
次に、マクロの記録の結果を利用する際のコツについてですが、まずはご本家(Microsoft)の説明に一度目を通してみられると良いと思います。(こちら

マクロの記録の場合、ユーザーの操作内容を 馬鹿正直に 記録して行きますので、何かをマウス操作で選択すると漏れなく 〜.Select と記録されます。
しかし、VBAでコードを記載する場合の基本は
{対象のオブジェクト}.プロパティ
{対象のオブジェクト}.メソッド
のように対象となるオブジェクトを明示するので、それをあらかじめ選択(Select)しておく必要性はありません。

それと、マウス操作でラベルの表示内容を変更する場合には、一旦削除してから作成し直した方が早いですが、VBAで操作する場合には表示済みのラベルの値を修正する方が効率が良いです。

さらに、実際にコードを書く際には、同じオブジェクトに対する参照を何度も書くと読みにくいので、適宜

With (一連の処理) End With

という書き方で同じオブジェクトに対する処理をまとめて書くと便利です。

###サンプルコード
以上を踏まえ こちら などを参考にサンプルコードを書いてみました。自分に環境では一応動きましたが、ゲストユーザーさんの環境ではどうか試してみてください。

Sub テスト用() Dim vntLabels As Variant Dim vntLabels As Variant With ActiveSheet ' ラベルに設定したい文字列の記載されているセル範囲をバリアント型変数へ読み込む vntLabels = .Range( {セル範囲} ) With .ChartObjects("グラフ 13").Chart.SeriesCollection(6) For i = 1 To .Points.Count .Points(i).DataLabel.Text = vntLabels(i, 1) Next i End With End With End Sub

以上、ご参考になれば幸いです。

投稿2015/09/11 03:19

編集2015/09/12 00:46
pi-chan

総合スコア5936

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

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

Alice0225

2015/09/11 03:32 編集

横からすみません。私も気になりましたものでゲスト様の質問を利用させてくださいませ。 pi-chanさんの回答を今回のケースに当てはめるとこんな感じでしょうか? Workbooks(hoge).WorkSheets("6").Activate Workbooks(hoge).WorkSheets("6").ChartObjects("グラフ 13").SeriesCollection(6).DataLabels.Delete Workbooks(hoge).WorkSheets("6").ChartObjects("グラフ 13").SeriesCollection(6).ApplyDataLabels Workbooks(hoge).WorkSheets("6").ChartObjects("グラフ 13").SeriesCollection(6).DataLabels.ShowSeriesName = True Workbooks(hoge).WorkSheets("6").ChartObjects("グラフ 13").SeriesCollection(6).DataLabels.Selection.ShowValue = False 当方初心者の為間違っていたら申し訳ございません ※12:30追記  上記コードで実行したところ、  「実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていません」と表示されました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問