Chat GPT × Excel VBA

 

今回も「Chat GPT」を使って、どんな感じで「Excel VBA」プログラムが作成できるか試していきたいと思います。

 

 

 グラフの操作 2(2軸のグラフ作成)

今回は、グラフ作成の応用で2軸のグラフを作成するプログラムを作成していきます。

 

 

  2軸のグラフ作成

 

①基本情報を作成する。

今回は「2023年度A店の売上推移」として、

「月度」

「集客数」を「男性」と「女性」

「売上金額」

として、数値データをChatGPTに作成依頼しました。

 

 

②ChatGPTにVBA作成依頼。

 

下の内容で2軸のグラフを作成するVBAを作成してください。

また、グラフの作成にAddchart2メソッドは使用しないでください。

1.シート名は「グラフ作成」

2.グラフタイトルはセルB3の値

3.X軸範囲はセルA7:A18で、X軸のタイトルはセルA5

4.1軸目の1つ目のデータ範囲はセルB7:B18で、系列名はセルB6

5.1軸目の2つ目のデータ範囲はセルC7:C18で、系列名はセルC6

6.1軸目の2つのデータは「集合縦棒」グラフで、1つ目のデータを青色、2つ目のデータを赤色

7.1軸目のY軸タイトルはセルB5

8.2軸目のデータ範囲はセルD7:D18で、系列名はセルD5、グラフ種類は折れ線グラフ

9.2軸目のY軸タイトルはセルD5

10.凡例をグラフの下に表示

 

③VBAを実行する。

実行結果は下のようになります。

 

 

※2軸のグラフを作成はできましたが、きちんと作成できるまでにいろいろ問題が発生しました。

 

私の質問が不明確なところもあると思いますが、ChatGPTのミス?もあり、意図したグラフ作成まで約30分かかりました。

自身でプログラムを全て手入力するよりは早いですが・・・

 

 

【実際のプログラム】

Sub CreateDualAxisChart()
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("グラフ作成")
    
    ' チャートオブジェクト作成
    Dim chtObj As chartObject
    Set chtObj = ws.ChartObjects.Add(Left:=300, Width:=400, Top:=50, Height:=300)
    chtObj.name = "DualAxisChart"
    
    ' データ範囲の設定
    Dim xVals As Range
    Set xVals = ws.Range("A7:A18")
    
    Dim data1 As Range
    Set data1 = ws.Range("B7:C18")
    
    Dim data2 As Range
    Set data2 = ws.Range("D7:D18")
    
    ' チャート作成
    With chtObj.Chart
        .HasTitle = True
        .ChartTitle.text = ws.Range("B3").Value
        
        ' X軸の設定
        .Axes(xlCategory).HasTitle = True
        .Axes(xlCategory).AxisTitle.text = ws.Range("A5").Value
'        .SeriesCollection.NewSeries.XValues = xVals

👆赤字のコマンドがあることで、「月度」も系列に追加されてしまうため、手動でコメントアウトに修正。
        
        ' 1軸目の設定
        With .SeriesCollection.NewSeries
            .name = ws.Range("B6").Value
            .Values = data1.Columns(1)
            .Format.Fill.ForeColor.RGB = RGB(0, 0, 255) ' 青

👆最初「.Format.ForeColor.RGB」と「Fill」が無かったため「オブジェクトは、このプロパティまたはメソッドをサポートしていません」と表示されました。


            .ChartType = xlColumnClustered ' 集合縦棒
        End With

        With .SeriesCollection.NewSeries
            .name = ws.Range("C6").Value
            .Values = data1.Columns(2)
            .Format.Fill.ForeColor.RGB = RGB(255, 0, 0) ' 赤
            .ChartType = xlColumnClustered ' 集合縦棒
            .AxisGroup = 1 ' 1軸目を使用

👆上のデータは1軸目のデータにする予定でしたが、「.AxisGroup = 2」で作成されていたため、2軸目のデータになっていたので手動で修整しました。


        End With
       
        ' 1軸目Y軸の設定
        .Axes(xlValue).HasTitle = True
        .Axes(xlValue).AxisTitle.text = ws.Range("B5").Value
        
        ' 2軸目の設定
        With .SeriesCollection.NewSeries
            .name = ws.Range("D5").Value
            .Values = data2.Columns(1)
            .ChartType = xlLineMarkers ' マーカー付き折れ線
            .AxisGroup = 2 ' 2軸目を使用
            .Format.line.ForeColor.RGB = RGB(255, 255, 0) ' 黄色
        End With

        ' 2軸目Y軸の設定
        .Axes(xlValue, xlSecondary).HasTitle = True
        .Axes(xlValue, xlSecondary).AxisTitle.text = ws.Range("D5").Value
        
        ' 凡例の設定
        .HasLegend = True
        .Legend.Position = xlLegendPositionBottom
    End With
    
End Sub

 

 

※その他に

・最初に「SetSourceData」で全てのデータ範囲を指定しグラフを作成

⇒その後に1軸目の2つのデータを追加

するプログラムになっていたため、1軸目に4つのデータが表示されていました。

 

・またまた、宣言がされていない変数が使用されている。

 

等の問題も発生したので、何度もChatGPTに最初からプログラムを作り直して上のプログラムを作成した後、更に上の修正を加えています。

 

あとがき

 

 

今回はChatGPTで、グラフの操作 2として「2軸のグラフ作成」のプログラムを作成しました。

 

今回はChatGPTで作成したVBAがすぐに動かない、意図したようになっていないことで、修正、時間がかかりました。

 

内容が複雑になると、ChatGPTへの依頼も難しくなり、理解ミスも発生するようなので、自身もある程度VBAの知識も持ってプログラムを見直せる力が必要と思われます。

 

 

次回は 印刷 1として、

・基本的な印刷方法

のプログラムを作成したいと思います。