見出し画像

【Excel VBA】VBAでグラフを書いてみる Vol.02

この記事は以下記事の続きです。
昨日はグラフオブジェクトの追加までコーディングしました。

今日は、系列を追加して散布図を描くところまでを作成しました。

完成コード

メインコード

Option Explicit

Public Sub TestCode()
    
    'データ選択
    Dim TableRange As Range
    With Sheet1.Range("A1").CurrentRegion
        'テーブルヘッダーを範囲から外す
        Set TableRange = .Resize(.Rows.Count - 1).Offset(1)
    End With
    
    'グラフオブジェクトの追加
    Dim Cht As Chart
    Set Cht = F_Create_GraphObject(Selection, "寸法変化")
    
    '系列追加
    Dim Series01 As Series
    Set Series01 = Cht.SeriesCollection.NewSeries
    Call S_Add_XYScatterMarkerLines(xRng:=TableRange.Columns(1), _
                                    yRng:=TableRange.Columns(2), _
                                    sName:="寸法(mm)", _
                                    inSrs:=Series01)
    
End Sub

系列はSeriesオブジェクトとして管理できる。
系列を追加したいチャートオブジェクト(Cht)にSeriesCollection.NewSeriesと書くことで系列が追加される。
ユーザー関数で、X軸、Y軸のセル範囲を設定、系列名はsNameに文字列で設定、inSrsは変更したい系列(Seriesオブジェクト)を指定します。

S_Add_XYScatterMarkerLinesプロシージャ

'**
'* 散布図マーカータイプのグラフを作成するサブプロシージャ
'* 引数1:xRng {Range型} X軸のデータを指定
'* 引数2:yRng {Range型} Y軸のデータを指定
'* 引数3:sName {String型} データの系列名を指定
'* 引数4:inSrs {Series型} シリーズ名を指定
'**
Private Sub S_Add_XYScatterMarkerLines(ByVal xRng As Range, _
                                       ByVal yRng As Range, _
                                      ByVal sName As String, _
                                      ByVal inSrs As Series)
    '処理
    With inSrs
        .ChartType = xlXYScatterLines
        .XValues = xRng
        .Values = yRng
        .Name = sName
    End With

End Sub

このプロシージャを作る意味があるか?という気もしますがメインコードをすっきりさせる意味ではあった方がよさそうな気がしたのでこうしました。

ここまででできるグラフ

自分のメモ用みたいな記事で申し訳ないです。
とりあえずこのような感じでグラフを作成するためのコードに何が必要かを調べていきたいと思っています。

いいなと思ったら応援しよう!