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として、
・基本的な印刷方法
のプログラムを作成したいと思います。