📊 AIとビジネス - Excel
AIでExcelピボットテーブルをマスター - ChatGPTデータ分析ガイド
ピボットテーブルが難しい?AIが段階的に教えてくれる通りに従えばデータ分析のプロになれます!
チャート自動生成
数字でいっぱいの表だけ見ても傾向がよく分かりませんよね。売上が上がったのか下がったのか、どの製品がよく売れているのか... こういうのを一目で把握するにはチャートが必須です。
でもチャート作成も結構面倒です。どんなチャートタイプを使うべきか悩むし、データ範囲を選択して、色を変えて、ラベルを追加して... 手間がかかりますよね。
AIを活用すればチャート生成も自動化できます。「このデータでチャート作って」と言えば、AIが状況に合ったチャートタイプを推薦して、VBAコードまで作ってくれます。ボタン一つでチャートがサクッと生成されます。
この記事では、AIでチャートを自動生成する方法を学びます。どんな状況にどんなチャートが適切かから、VBAで自動生成するコードまで、実践例と共に見ていきましょう。
1. チャートタイプ選択ガイド
AIプロンプト
"次の状況に最も適したチャートタイプを推薦してください:
1. 月別売上推移分析
2. 製品別売上比重
3. 地域別売上比較
4. 時間帯別顧客訪問パターン
5. 目標対比実績"
AI推薦結果
1. 月別売上推移 → 折れ線グラフ (Line Chart)
- 時間による変化を明確に表現
2. 製品別売上比重 → 円グラフ (Pie Chart)
- 全体に占める割合を表示
3. 地域別売上比較 → 縦棒グラフ (Column Chart)
- 項目間のサイズ比較に効果的
4. 時間帯別訪問パターン → 面グラフ (Area Chart)
- 時間帯別密集度を表現
5. 目標対比実績 → 複合グラフ (Combo Chart)
- 棒(実績) + 線(目標)
2. VBAでチャート自動生成
月別売上推移チャート
AIプロンプト:
"A列に月(1月、2月...)、B列に売上額があります。
このデータで折れ線グラフを自動生成するVBAコードを作ってください。
チャートタイトルは'2025年月別売上推移'にして、
データラベルも表示してください。"
AI生成VBA:
Sub 月別売上チャート生成()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim lastRow As Long
Set ws = ThisWorkbook.Sheets("売上データ")
' 最終行を探す
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 既存チャート削除 (あれば)
For Each chartObj In ws.ChartObjects
If chartObj.Name = "売上推移チャート" Then
chartObj.Delete
End If
Next
' 新しいチャート生成
Set chartObj = ws.ChartObjects.Add( _
Left:=ws.Range("D2").Left, _
Top:=ws.Range("D2").Top, _
Width:=500, _
Height:=300)
With chartObj.Chart
' チャートタイプ設定
.ChartType = xlLineMarkers
' データ範囲設定
.SetSourceData Source:=ws.Range("A1:B" & lastRow)
' チャートタイトル
.HasTitle = True
.ChartTitle.Text = "2025年月別売上推移"
.ChartTitle.Font.Size = 14
.ChartTitle.Font.Bold = True
' 軸タイトル
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Text = "月"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Text = "売上額 (円)"
' データラベル表示
.SeriesCollection(1).HasDataLabels = True
.SeriesCollection(1).DataLabels.NumberFormat = "#,##0"
' 凡例表示
.HasLegend = True
.Legend.Position = xlLegendPositionBottom
' グリッドライン設定
.Axes(xlValue).HasMajorGridlines = True
.Axes(xlValue).HasMinorGridlines = False
End With
chartObj.Name = "売上推移チャート"
MsgBox "チャートが生成されました。", vbInformation
End Sub
3. 製品別売上比重パイチャート
AIプロンプト:
"製品名と売上額データでパイチャートを作り、
各スライスに製品名と比率を表示してください。
上位5個だけ表示して残りは'その他'にまとめてください。"
AI生成VBA:
Sub 製品別比重チャート()
Dim ws As Worksheet
Dim chartWs As Worksheet
Dim chartObj As ChartObject
Dim dataRange As Range
Dim lastRow As Long
Dim i As Long
Set ws = ThisWorkbook.Sheets("製品データ")
' データソート (売上額基準降順)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
ws.Range("A1:B" & lastRow).Sort _
Key1:=ws.Range("B1"), _
Order1:=xlDescending, _
Header:=xlYes
' 上位5個 + その他処理
If lastRow > 6 Then
Dim etcSum As Double
etcSum = Application.WorksheetFunction.Sum(ws.Range("B7:B" & lastRow))
ws.Range("A7").Value = "その他"
ws.Range("B7").Value = etcSum
ws.Range("A8:B" & lastRow).Delete Shift:=xlUp
lastRow = 7
End If
' チャート生成
Set chartObj = ws.ChartObjects.Add( _
Left:=ws.Range("D2").Left, _
Top:=ws.Range("D2").Top, _
Width:=400, _
Height:=400)
With chartObj.Chart
.ChartType = xlPie
.SetSourceData Source:=ws.Range("A1:B" & lastRow)
' チャートタイトル
.HasTitle = True
.ChartTitle.Text = "製品別売上比重"
' データラベル (製品名 + 比率)
.SeriesCollection(1).HasDataLabels = True
With .SeriesCollection(1).DataLabels
.ShowCategoryName = True
.ShowPercentage = True
.ShowValue = False
.Separator = vbNewLine
.Position = xlLabelPositionBestFit
.Font.Size = 10
End With
' 凡例非表示 (ラベルに既に表示)
.HasLegend = False
' 色設定
For i = 1 To .SeriesCollection(1).Points.Count
.SeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = _
Choose(i, RGB(79, 129, 189), RGB(192, 80, 77), _
RGB(155, 187, 89), RGB(128, 100, 162), _
RGB(75, 172, 198), RGB(247, 150, 70))
Next i
End With
MsgBox "パイチャートが生成されました。", vbInformation
End Sub
4. 地域別比較棒グラフ
AIプロンプト:
"地域別売上を縦棒グラフで作り、
目標値を点線で表示してください。
目標達成した棒は青色、未達は赤色で表示してください。"
AI生成VBA:
Sub 地域別比較チャート()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim lastRow As Long
Dim i As Long
Dim targetValue As Double
Set ws = ThisWorkbook.Sheets("地域データ")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
targetValue = ws.Range("D1").Value ' 目標値
' チャート生成
Set chartObj = ws.ChartObjects.Add( _
Left:=ws.Range("E2").Left, _
Top:=ws.Range("E2").Top, _
Width:=500, _
Height:=350)
With chartObj.Chart
.ChartType = xlColumnClustered
.SetSourceData Source:=ws.Range("A1:B" & lastRow)
' チャートタイトル
.HasTitle = True
.ChartTitle.Text = "地域別売上実績"
' 軸タイトル
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Text = "地域"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Text = "売上額 (百万円)"
' データラベル
.SeriesCollection(1).HasDataLabels = True
.SeriesCollection(1).DataLabels.NumberFormat = "#,##0"
' 各棒の色設定 (目標達成の有無)
For i = 1 To .SeriesCollection(1).Points.Count
If ws.Cells(i + 1, 2).Value >= targetValue Then
' 目標達成 - 青色
.SeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = RGB(79, 129, 189)
Else
' 目標未達 - 赤色
.SeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = RGB(192, 80, 77)
End If
Next i
' 目標線追加
With .SeriesCollection.NewSeries
.Name = "目標"
.ChartType = xlLine
.Values = "=" & ws.Name & "!$D$1"
.AxisGroup = xlPrimary
.Format.Line.DashStyle = msoLineDash
.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
.Format.Line.Weight = 2
End With
' 凡例
.HasLegend = True
.Legend.Position = xlLegendPositionTop
End With
MsgBox "地域別比較チャートが生成されました。", vbInformation
End Sub
まとめ
AIでチャート自動生成:
- ✅ 適切なチャートタイプを自動選択
- ✅ VBAで反復作業を自動化
- ✅ 動的チャートでリアルタイム更新
- ✅ ダッシュボード一括生成
次の記事では、データの重複を見つけて整理する方法を学びます。