【ExcelVBA・マクロ】スパークラインの使い方|SparklineGroupsでセル内グラフを一括作成する方法【コピペOK】

ExcelVBA

売上推移や在庫の増減など、数値の並びだけではパッと傾向がつかみにくいデータも、セルの中に小さなグラフ(スパークライン)を添えるだけで一目で分かるようになります。Excelの「挿入」タブから手動で設定することもできますが、行数が多いデータでは1行ずつ設定するのは手間がかかります。

この記事では、VBAのSparklineGroupsを使ってスパークラインを自動作成する方法を、基本の作成から書式設定、複数行への一括適用、削除まで解説します。

スポンサーリンク
スポンサーリンク

スパークラインとは

スパークラインは、セル内に表示できる小さなグラフです。折れ線・縦棒・勝敗(増減)の3種類があり、セルの値を変えずに傾向だけを視覚的に表示できるのが特徴です。表のレイアウトを崩さずに推移を見せたいときに便利な機能です。

基本の使い方:1つのスパークラインを作成する

スパークラインは、RangeオブジェクトのSparklineGroups.Addメソッドで作成します。作成先(表示するセル)に対してAddを呼び出し、種類とデータ範囲(文字列アドレス)を指定します。

Sub AddSingleSparkline()
    Dim sg As SparklineGroup

    ' F2セルに、B2:E2のデータを元にした折れ線スパークラインを作成
    Set sg = Range("F2").SparklineGroups.Add(xlSparkLine, "B2:E2")

    MsgBox "スパークラインを作成しました"
End Sub

xlSparkLineを指定すると折れ線、xlSparkColumnを指定すると縦棒タイプのスパークラインになります。

複数行に一括で作成する

表のデータが複数行にわたる場合でも、作成先とデータ範囲をそれぞれ複数行にまとめて指定すれば、行ごとに対応したスパークラインをまとめて作成できます。1件ずつループする必要はありません。

Sub AddSparklinesForAllRows()
    Dim sg As SparklineGroup
    Dim lastRow As Long
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    ' B2:E(lastRow) のデータを元に、F2:F(lastRow) にまとめてスパークラインを作成
    Set sg = ws.Range("F2:F" & lastRow).SparklineGroups.Add( _
        xlSparkLine, "B2:E" & lastRow)

    MsgBox lastRow - 1 & "行分のスパークラインを作成しました"
End Sub

この方法で作成したスパークラインは「グループ」として扱われ、後から色や太さを変更すると同じグループ内のすべてのスパークラインに一括で反映されます。

書式を設定する(色・線の太さ・強調表示)

作成したスパークライングループに対して、色や特定のポイント(最大値・最小値・マイナス値)の強調表示を設定できます。

Sub FormatSparklines()
    Dim sg As SparklineGroup
    Set sg = Range("F2").SparklineGroups.Item(1)

    ' 線の色と太さ
    sg.SeriesColor.Color = RGB(68, 114, 196)
    sg.LineWeight = 1.5

    ' 最高値・最安値・マイナス値を強調表示
    sg.Points.High.Visible = True
    sg.Points.High.Color.Color = RGB(0, 176, 80)
    sg.Points.Low.Visible = True
    sg.Points.Low.Color.Color = RGB(255, 0, 0)
    sg.Points.Negative.Visible = True
    sg.Points.Negative.Color.Color = RGB(255, 0, 0)
End Sub

Points.HighPoints.Lowは、グループ内で最も高い値・低い値を持つ点を自動的に見つけて色付けしてくれるため、手作業で条件付き書式を組むよりも簡単に「一番良い月」「一番悪い月」を目立たせることができます。

グラフの種類を後から変更する

作成済みのスパークライングループのTypeプロパティに別の種類を代入すると、折れ線と縦棒を切り替えられます。

Sub ChangeSparklineType()
    Dim sg As SparklineGroup
    Set sg = Range("F2").SparklineGroups.Item(1)

    ' 折れ線から縦棒に変更
    sg.Type = xlSparkColumn
End Sub

スパークラインを削除する

不要になったスパークラインは、対象セルのSparklineGroupsコレクションに対してDeleteを呼び出すことで削除できます。

Sub DeleteSparklines()
    Dim lastRow As Long
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    ws.Range("F2:F" & lastRow).SparklineGroups.Delete

    MsgBox "スパークラインを削除しました"
End Sub

実践例:売上表にまとめてスパークラインを設定するマクロ

ここまでの内容を組み合わせると、月次売上表の各行に、色や強調表示まで整えたスパークラインをワンクリックで一括設定できます。

Sub SetupSalesSparklines()
    Dim ws As Worksheet
    Dim sg As SparklineGroup
    Dim lastRow As Long

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    ' 既存のスパークラインがあれば一旦削除してから作り直す
    On Error Resume Next
    ws.Range("F2:F" & lastRow).SparklineGroups.Delete
    On Error GoTo 0

    Set sg = ws.Range("F2:F" & lastRow).SparklineGroups.Add( _
        xlSparkLine, "B2:E" & lastRow)

    With sg
        .SeriesColor.Color = RGB(68, 114, 196)
        .LineWeight = 1.25
        .Points.High.Visible = True
        .Points.High.Color.Color = RGB(0, 176, 80)
        .Points.Low.Visible = True
        .Points.Low.Color.Color = RGB(255, 0, 0)
    End With

    MsgBox "売上表のスパークラインを更新しました"
End Sub

注意点

  • データ範囲は文字列アドレスで指定するAddメソッドのSourceData引数は、Rangeオブジェクトではなく"B2:E2"のような文字列アドレスで渡します。
  • 作成先とデータ範囲の行数を揃える:複数行にまとめて作成する場合、作成先セル範囲の行数とデータ範囲の行数が一致している必要があります。
  • Excel 2010以降の機能:スパークラインはExcel 2010から搭載された機能のため、古いバージョンとの互換性が必要なブックでは利用できない点に注意してください。

まとめ

  • スパークラインはRange.SparklineGroups.Add(Type, SourceData)で作成する
  • xlSparkLineで折れ線、xlSparkColumnで縦棒タイプになる
  • 作成先とデータ範囲を複数行まとめて指定すれば、1行ずつのループなしで一括作成できる
  • SeriesColorPoints.HighPoints.LowPoints.Negativeで色や強調表示を設定できる
  • 不要になった場合はSparklineGroups.Deleteで削除する

大量のデータ行にスパークラインを手作業で設定するのは大変ですが、VBAで自動化すれば、データ更新のたびにワンクリックで見た目の整った推移グラフを反映できます。ぜひ月次レポートなどの作成に活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました