EXCEL VBA で散布図を作成しデータ系列を新規に追加する

 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 というコレクションを指している.このあたり本当にややこしい.

凡例項目はSeriesCollection
凡例項目はSeriesCollection

 「追加」をクリックする.これが .NewSeries メソッドにあたり,Series オブジェクトを一つ追加したことになる.

 「系列の編集」で何も入力せずに「OK」をクリックする.系列は Series オブジェクトであり,系列名は .Name プロパティ,系列 X の値は .XValues プロパティ,系列 Y の値は .Values プロパティで取得される.

系列はSeriesオブジェクト.系列名は.Nameプロパティ,系列Xの値は.XValuesプロパティ,系列Yの値は.Valuesプロパティで取得
系列はSeriesオブジェクト.系列名は.Nameプロパティ,系列Xの値は.XValuesプロパティ,系列Yの値は.Valuesプロパティで取得

 すると,空の系列が追加される.

一つ追加された系列がSeriesオブジェクトである
一つ追加された系列がSeriesオブジェクトである

データ系列の追加は 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件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください