목록으로
📊 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で反復作業を自動化
  • ✅ 動的チャートでリアルタイム更新
  • ✅ ダッシュボード一括生成

次の記事では、データの重複を見つけて整理する方法を学びます。