アプリ版:「スタンプのみでお礼する」機能のリリースについて

Chart, ChartObjects, Shapesの使用について質問です。

記録マクロで散布図を作成すると、以下のようになります。
Sub Macro()
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).XValues = "=Sheet1!$A$2:$A$6"
ActiveChart.FullSeriesCollection(1).Values = "=Sheet1!$B$2:$B$6"
End Sub

一方mougを参考にすると以下のように書いてます(散布図ではありません)。
Sub Sample2()
ActiveSheet.ChartObjects.Add 30, 50, 300, 200
ActiveSheet.ChartObjects(1).Chart.ChartType = xlColumnClustered
ActiveSheet.ChartObjects(1).Chart.SetSourceData Source:=Range("A1:B3")
End Sub

mougではShapesもChartも使わず、ChartObjectsだけです。どうしてですか?
Shapes.Charts=ChartObjectsですか?どうもしっくりしません。

A 回答 (2件)

私は、そんなに難しいことは知りませんが、



ChartObject というのは、ワークシートに貼り付ける(埋め込み)グラフのことで、ワークシートに従属して、それしか作らないからでしょう。

Shapes.AddChart なら、こちらは、グラフシートにするか、シート貼り付けにするか、どちらかに振り分けますという意味ですよね。
その時点では、どちらにも決まっていないはずです。

Shapes というのは、ワークシートのオブジェクトの総称のようなもので、単にそのオブジェクトのコレクションであり、それにAddをつけると、そのひとつ(インスタンス)を呼び出します、というような意味だと思います。

Shapesというコレクションは、97以降だったか、比較的後の時代に現れた統合されたオブジェクトで、当然、グラフを作る場合は、直接呼び出ししたほうが早いから、ChartObject[=ChartObjects(1)] を使うわけです。逆に、グラフシートなら、Charts.Add でしょうね。

Mougの書いた人がどうかは分かりませんが、コードとしては、一種のスタイル(格好)の問題だと思います。回り道の案内図では格好が悪いからだと思います。

ただ、その記録マクロは、Excel 2013で作られたものでしょうから、その内容については詳しくは分かりません。
    • good
    • 0

こんにちは



ほとんどわかってないので、単に、検索してみただけですが・・・
(的外れでしたら、無視してください)

MSDNの説明では、『ChartObject オブジェクトは、Chart オブジェクトのコンテナーとして機能します。』となっています。
また、それぞれのコレクションがChartObjects、Chartsということみたいですね。
https://msdn.microsoft.com/ja-jp/library/office/ …

>mougではShapesもChartも使わず、ChartObjectsだけです
ご提示なさっているコードで
>ActiveSheet.ChartObjects(1).Chart ~~
として、Chartオブジェクトを取得して操作していますので、ChartObjectsだけで全て完結してるわけではないと思います。

一方で、記録のマクロのほうでも
>ActiveChart ~~
としていますので、両方ともChartオブジェクトに対する操作を行っていると言えます。
(実際には、そこからさらにオブジェクトを取得していたりするようですが…)
Chartオブジェクトの指定に際して、どのようなオブジェクト経由で特定しているかが、それぞれのコードで異なるだけではないでしょうか?
(例示のコードでは、操作の内容も違うようですが、それはご質問の趣旨ではないと思いますので)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!