VBAから見たEXCELの散布図では散布図を作成する際に .ChartObjects.Add を用いたが,今回は別の経路で散布図を作成するコードを紹介する.またデータ系列に何も入力のない,空っぽのデータ系列を新規作成したときのコードも紹介する.
「挿入」「グラフ」「散布図」「直線とマーカー」
EXCEL の標準的な操作では「挿入」タブの「グラフ」に「散布図」があるのでそこから「散布図(直線とマーカー)」を選ぶ.
VBA ではこの行程を次のように記述する.
Sub AddScatterPlot() Dim mySht As Worksheet Dim myCht As Chart Set mySht = Worksheets(1) Set myCht = mySht.Shapes.AddChart2(-1, xlXYScatterLines, 0, 0, 300, 300).Chart End Sub
汎用性のあるコードは .Shapes.Addchart2.Chart
EXCEL 2013 から実装されたメソッドである.これから覚えるならこの手法が良いだろう.
重要なポイントは 7 行目である.Shapes コレクションに対して .Addchart2 メソッドを実行すると新しい Shape オブジェクトが取得できる.この Shape オブジェクトに .Chart プロパティを付加して Chart オブジェクトを取得している.
ややこしい記述だが,これがお作法なので覚えるしかない.
空のデータ系列を新規に作成する
作成した空のグラフを右クリックして「データの選択…」を選ぶ.
「データソースの選択」ダイアログが開く.左下に「凡例項目(系列)」とある.これは SeriesCollection というコレクションを指している.このあたり本当にややこしい.
「追加」をクリックする.これが .NewSeries メソッドにあたり,Series オブジェクトを一つ追加したことになる.
「系列の編集」で何も入力せずに「OK」をクリックする.系列は Series オブジェクトであり,系列名は .Name プロパティ,系列 X の値は .XValues プロパティ,系列 Y の値は .Values プロパティで取得される.
すると,空の系列が追加される.
データ系列の追加は Chart.SeriesCollection.NewSeries と覚える
このあたりもお作法として覚えるしかない.コードを載せておく.
Sub mySeries() Dim mySht As Worksheet Dim myCht As Chart Dim mySeries As Series Set mySht = Worksheets(1) With mySht.ChartObjects Set myCht = .Item(.Count).Chart End With Set mySeries = myCht.SeriesCollection.NewSeries End Sub
ここで重要なポイントは 13 行目である.
ところで,なぜ空のデータ系列を追加するのか?
いいところに気がついた.データ系列一つ一つは Series オブジェクトで取得するのだが,検索しても通常はワークシートの Range オブジェクトを指定しているコードがほとんどだ.
しかしやってみると分かるが,Series オブジェクトの .XValues プロパティや .Values プロパティには配列そのものを直接指定できる.それも (X, Y) の値のペアとしてではなく,X の値の配列,Y の値の配列としてである.
Range オブジェクトだとデータとロジックの結合を疎にできないが,配列を指定できるならデータとロジックを分離できる.ここにコーディングの自由度が増すポイントがある.
“EXCEL VBA で散布図を作成しデータ系列を新規に追加する” への1件の返信