EXCEL VBA スパークラインを設定する。簡易グラフを作成する(SparklineGroups.Addメゾット)
EXCEL VBA スパークラインを設定する。簡易グラフを作成する(SparklineGroups.Addメゾット)
今回説明するのは、EXCEL2010から追加された機能のスパークラインをVBAで設定する方法を説明いたします。スパークラインは、セル内に表示する簡易的に表現をする事のできるグラフのことになります。表現する事のできるグラフは、3種類あり(折れ線・縦棒・勝敗)の3つの簡易グラフをセル内に表現する事が出来ます。複数のグラフ作成する場合は、このスパークラインの機能を使う事で、簡単にグラフを作成してビジュアル的に表現する事が出来ます。
●【String関数・簡易グラフの作成・指定文字の繰り返し表示については、下記を参照して下さい】
●【スパークラインの利用方法については、下記を参照して下さい(Microsoft社 様)】
https://docs.microsoft.com/ja-jp/office/vba/excel/concepts/sparklines/animate-a-sparkline
● SparklineGroups.Addメソッドを利用するには、下記の通りに設定を行います。
【スパークライン(簡易グラフ)の表示】
●オブジェクト.SparklineGroups.Add( Type, SourceData )
Type : は、下記の定数または、値でグラフの種類を指定します。
SourceData:は、グラフの元データ(セル範囲A1形式)を指定します。
定数(Type) | 値 | 内容(説明) |
---|---|---|
xlSparkLine | 1 | 折れ線グラフ |
xlSparkColumn | 2 | 縦棒グラフ |
xlSparkColumnStacked100 | 3 | 勝敗グラフ |
●SparklineGroups.Add( Type, SourceData )の利用例
1 2 3 4 5 6 7 8 9 |
' ' Sub SparkLine_zigzag() 'スパークライン(折れ線グラフ設定) ActiveSheet.Range("I4:I9").SparklineGroups.Add Type:=xlSparkLine, SourceData:="C4:H9" End Sub ' ' |
【使用例】(縦棒グラフ)
1 2 3 4 5 6 7 8 9 |
' ' Sub SparkLine_Columnchart() 'スパークライン(縦棒グラフ設定) ActiveSheet.Range("I4:I9").SparklineGroups.Add Type:=xlSparkColumn, SourceData:="C4:H9" End Sub ' ' |
1 2 3 4 5 6 7 8 9 10 11 |
' ' Sub SparkLine_Outcome() 'スパークライン(勝敗グラフ設定) ActiveSheet.Range("I4:I9").SparklineGroups.Add Type:=xlSparkColumnStacked100, SourceData:="C4:H9" End Sub ' ' |
EXCEL VBA スパークラインを設定する。データ量に応じて自動的に簡易グラフを作成する(SparklineGroups.Addメゾット)
下記のサンプルプログラムは、SparklineGroups.Addメゾットを利用して縦のデータ件数に応じて、自動的に簡易グラフを作成するサンプルプログラムです。
【プログラムの流れ】
① アクティブシートのA列の最終行を取得します。
② 既存のスパークラインを削除します。(グループ化しているスパークライン)
③ A列の最終行から取得したデータ件数を元に、各支店ごとにスパークラインを作成します。(折れ線グラフ)
④ ③で作成したスパークライン(折れ線グラフ)にマーカーポイントを設定します。
【プログラム実行条件】
・セルB列からE列までに数値データを入力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' ' Sub SparkLine_zigzag10() 'データ件数に応じてスパークライン(折れ線グラフ設定)を設定 Dim I, lRow As Long Dim SLG As SparklineGroup lRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得します。 ActiveSheet.Range("F4").SparklineGroups.ClearGroups '既存のスパークラインを削除します。 Set SLG = ActiveSheet.Range("F4:F" & lRow).SparklineGroups.Add(Type:=xlSparkLine, SourceData:="B4:E" & lRow) 'A列の最終行より取得したデータ件数を元にセルF4~F最終列までセルB列~E列の範囲データを元にスパークラインにて簡易グラフを作成 SLG.Points.Markers.Visible = True '折れ線にマーカーポイントを設定 End Sub ' ' |
(画面クリックして拡大)
EXCEL VBA スパークラインを設定する。データ量に応じて自動的に別シートへ3種類(折れ線・縦棒・勝敗)の簡易グラフを作成する(SparklineGroups.Addメゾット)
下記のサンプルプログラムは、サンプルプログラム①の応用になります。データ量に応じて自動的に別シートへ3種類(折れ線・縦棒・勝敗)の簡易グラフを作成します。簡易グラフについては、別シートに3種類作成します。
【プログラムの流れ】
① ワークシート「データ」A列の最終行を取得します。
② ワークシート「グラフ」既存のスパークライングループをA列・B列・C列を削除します。
③ ワークシート「データ」のデータを元に、ワークシート「グラフ」のA列に、折れ線グラフを作成します。
④ ワークシート「グラフ」の折れ線グラフにマーカーポイントを設定します。
⑤ ワークシート「データ」のデータを元に、ワークシート「グラフ」のB列に、縦棒グラフを作成します。
⑥ ワークシート「データ」のデータを元に、ワークシート「グラフ」のB列に、勝敗グラフを作成します。
【プログラム実行条件】
・ワークシート「データ」には、データを入力します。
・ワークシート「グラフ」を作成します。※このワークシートにスパークライン「簡易グラフ」が作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
' ' Sub SparkLine_zigzag20() 'データ件数に応じてスパークライン(3種類のグラフを作成) Dim ws01, ws02 As Worksheet Dim SLG As SparklineGroup Dim lRow As Long Set ws01 = Worksheets("データ") Set ws02 = Worksheets("グラフ") lRow = ws01.Cells(Rows.Count, "A").End(xlUp).Row 'ワークシート「データ」A列の最終行を取得します。 ws02.Range("A4,B4,C4").SparklineGroups.ClearGroups 'ワークシート「グラフ」既存のスパークラインを削除します。 Set SLG = ws02.Range("A4:A" & lRow).SparklineGroups.Add(Type:=xlSparkLine, SourceData:=ws01.Name & "!B4:E" & lRow) 'ワークシート「データ」A列の最終行より取得したデータ件数を元にセルF4~F最終列までセルB列~E列の範囲データを元にスパークラインにて簡易グラフを作成(折れ線) SLG.Points.Markers.Visible = True '折れ線にマーカーポイントを設定 Set SLG = ws02.Range("B4:B" & lRow).SparklineGroups.Add(Type:=xlSparkColumn, SourceData:=ws01.Name & "!B4:E" & lRow) '(縦棒グラフを作成) Set SLG = ws02.Range("C4:C" & lRow).SparklineGroups.Add(Type:=xlSparkColumnStacked100, SourceData:=ws01.Name & "!B4:E" & lRow) '(勝敗グラフ) End Sub ' ' |
(画面クリックして拡大)
EXCEL VBA スパークラインを削除する・(スパークライングループ)
下記のサンプルプログラムは、グループ化したスパークラインを削除するサンプルプログラムです。
● オブジェクト.SparklineGroups.ClearGroups
【使用例】
Range(“A1”).SparklineGroups.ClearGroups
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
' 'グループのスパークラインを削除 ' Sub スパークグループ削除サンプル①() ActiveSheet.Range("A4,B4,C4").SparklineGroups.ClearGroups 'グループ化したスパークラインを削除します。 End Sub ' ' ' Sub スパークグループ削除サンプル②() Dim I As Long For I = 1 To 3 ActiveSheet.Cells(4, I).SparklineGroups.ClearGroups 'グループ化したスパークラインを削除します。 Next I End Sub ' ' ' Sub スパークグループ削除サンプル③() ActiveSheet.Cells.SparklineGroups.ClearGroups 'アクティブシートの全てのグループ化したスパークラインを削除します。 End Sub ' ' |
(画面クリックして拡大)
EXCEL VBA 指定したスパークラインを削除します。(単体のスパークラインを削除)
下記のサンプルプログラムは、グループ化したスパークラインを削除するサンプルプログラムです。下記のプログラムでは、セルA4・B6~B7・C列全てのスパークラインに対して削除を行います。
● オブジェクト.SparklineGroups.Clear
【使用例】
Range(“A1”).SparklineGroups.Clear
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' ' Sub スパーク削除() '指定及び単体のスパークラインを削除 ActiveSheet.Range("A4").SparklineGroups.Clear 'セル番号A4のスパークラインを削除します。 ActiveSheet.Range("B6:B7").SparklineGroups.Clear 'セル番号B6~B7のスパークラインを削除します。 ActiveSheet.Range("C:C").SparklineGroups.Clear 'C列全体のスパークラインを削除します。 End Sub ' ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。