PR

【VBA】グラフを作成する(タイトル/軸ラベル/名前/行列入替/2軸表示)

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
Excelで扱うことが多いグラフもVBAを使って作成することが出来ます。
今回はグラフの作成/グラフ名/グラフタイトル/軸ラベル(凡例)/第2軸表示の方法について書いていきたいと思います。

スポンサーリンク

1.サンプル概要

対象シート(サンプルではSheet2)にグラフ化したいデータが以下画像の様にあるとします。

このデータを集合縦棒グラフ化し、グラフ名を「出荷数量」、グラフタイトルを「【上期】出荷数量」、軸ラベルを「(品番別出荷数)」として設定します。

又、グラフ化した際に「合計」データを2軸上に折れ線で表示する為にデータの行列を入れ替え、2軸表示化も行うものです。

実行結果として、以下の様になります。

グラフのセンスに問題がありますが、サンプルとしてなのでご容赦を(笑)
次にサンプルコード全体です。

2.サンプルコード

◆グラフ化、データ行列切替、グラフ名、タイトル設定

Sub Sample1()
  
  With Worksheets("Sheet2").ChartObjects _
        .Add(10, 170, 450, 300).Chart  'グラフ挿入と位置、サイズ指定
        .SetSourceData Cells(3, 2).CurrentRegion  'セルA3を基点に表データ取得
        .ChartType = xlColumnClustered  '「集合縦棒グラフ」
        
      'グラフデータの「合計」を2軸に表示する為、
      'データの行列を入れ替える
      Select Case .PlotBy
        Case xlRows
          .PlotBy = xlColumns
        Case xlColumns
          .PlotBy = xlRows
      End Select
 
  End With

  With Worksheets("Sheet2").ChartObjects(1)
        'グラフの名前を設定
        .Name = "出荷数量"
      With .Chart
         'グラフタイトルの表示
          .HasTitle = True
         With .ChartTitle
            .Text = "【上期】出荷数量"
            .Font.Size = 12
         End With
     End With
  End With

  Call Sample2  '軸ラベル表示
  Call Sample3  '「合計」の2軸表示
  
End Sub

◆軸ラベル表示(Call Sample2部分)

Sub Sample2()
  
    '軸ラベルを表示する

    With Worksheets("Sheet2").ChartObjects(1).Chart _
         .Axes(xlCategory)  '項目軸
         .HasTitle = True  'ラベル表示
         .AxisTitle.Text = "(品番別出荷数)"  'ラベル表示文字指定
         .AxisTitle.Font.Size = 9  'フォントサイズ指定
    End With

End Sub

◆合計の2軸表示(Call Sample3部分)

Sub Sample3()

  '指定系列を第2軸に表示する

  With Worksheets("Sheet2").ChartObjects(1).Chart
       .HasAxis(xlValue, xlSecondary) = True
       '第2軸を表示
       With .SeriesCollection("合計")  '「合計」データ系列
            .ChartType = xlLine  '折れ線グラフ
            .AxisGroup = xlSecondary  'グラフを第2軸にする
        End With
  End With

End Sub

これらのコードを実行することで、概要に示したグラフを作ることが出来ます。
各ポイントについて以下に解説していきます。

3.コード解説

◆Sample1

このSample1ではグラフを挿入、データの選択、グラフ種類、データ行列の入れ替え、グラフ名の設定、グラフタイトルの表示を行います。

コード内に記述しているCall Sample2の実行前で停止させると、このような形になります。

合計の2軸表示と軸ラベル表示前の状態ですね。

≪グラフの挿入≫

Worksheets(“Sheet2”).ChartObjects _
.Add(10, 170, 450, 300).Chart

この記述の様にAddメソッドにChartObjectsを指定することでグラフが作成されます。
()内数値は(Left,Top,Width,Height)を示しており、

  • Left → グラフ左端位置
  • Top → グラフ上端位置
  • Width → グラフの幅
  • Height → グラフの高さ

これらを各々設定します。

 

≪データの選択≫

.SetSourceData Cells(3, 2).CurrentRegion

ここで元になるデータを指定します。
CurrentRegionは空白で囲まれた対象を一括で選択してくれますので、元データ表の左上を
基点として表全体を選択します。

 

≪グラフ種類≫

.ChartType = xlColumnClustered

本サンプルでは集合縦棒グラフを指定していますが、この定数は以下の種類がありますので用途に応じて設定することが出来ます。

名前説明
xl3DArea3-D面
xl3DAreaStacked3-D積み上げ面
xl3DAreaStacked100100%積み上げ面
xl3DBarClustered3-D集合横棒
xl3DBarStacked3-D積み上げ横棒
xl3DBarStacked1003-D100%積み上げ横棒
xl3DColum3-D縦棒
xl3DColumClustered3-D集合縦棒
xl3DColumStacked3-D積み上げ縦棒
xl3DColumStacked1003-D100%積み上げ横棒
xl3DLine3-D折れ線
xl3DPie3-D円
xl3DPieExploeded分割3-D円
xlArea
xlAreaStacked積み上げ面
xlAreaStacked100100%積み上げ面
xlBarClustered集合横棒
xlBarOfPie補助縦棒グラフ付き円
xlBarStacked積み上げ横棒
xlBarStacked100100%積み上げ横棒
xlBubbleバブル
xlBubble3DEffect3-D効果付きバブル
xlColumnClustered集合縦棒
xlColumnStacked積み上げ縦棒
xlColumnStacked100100%積み上げ縦棒
xlConeBarClustered積み上げ円錐型横棒
xlConeCol3-D円錐型縦棒
xlConeColClustered集合円錐型縦棒
xlConeColStacked積み上げ円錐型縦棒
xlConeColStacked100100%積み上げ円錐型縦棒
xlCylinderBarClustered集合円柱型横棒
xlCylinderBarStacked積み上げ円柱型横棒
xlCylinderBarStacked100100%積み上げ円柱型横棒
xlCylinderCol3-D円柱型縦棒
xlCylinderColClustered集合円錐型縦棒
xlCylinderColStacked積み上げ円錐型縦棒
xlCylinderColStacked100100%積み上げ円錐型縦棒
xlDoughnutドーナツ
xlDoughnutExploeded分割ドーナツ
xlLine折れ線
xlLineMarkersマーカー付き折れ線
xlLineMarkersStackedマーカー付き積み上げ折れ線
xlLineMarkersStacked100マーカー付き100%積み上げ折れ線
xlLineStacked積み上げ折れ線
xlLineStacked100100%積み上げ折れ線
xlPie
xlPieExploeded分割円
xlPieOfPie補助円グラフ付き円
xlPyramidBarClustered集合ピラミッド型横棒
xlPyramidBarStacked積み上げピラミッド型横棒
xlPyramidBarStacked100100%積み上げピラミッド型横棒
xlPyramidCol3-Dピラミッド型縦棒
xlPyramidColClustered集合ピラミッド型横棒
xlPyramidColStacked積み上げピラミッド型縦棒
xlPyramidColStacked100100%積み上げピラミッド型縦棒
xlRadarレーダー
xlRadarFilled塗りつぶしレーダー
xlRadarMarkersデータマーカー付きレーダー
xlStockHLC高値・安値・終値
xlStockOHLC始値・高値・安値・終値
xlStockVHLC出来高・高値・安値・終値
xlStockVOHLC出来高・始値・高値・安値・終値
xlSurface3-D表面
xlSurfaceTopView表面(トップビュー)
xlSurfaceTopViewWireframe表面(トップビュー・ワイヤーフレーム)
xlSurfaceWireframe3-D表面(ワイヤーフレーム)
xlXYScatter散布図
xlXYScatterLines折れ線付き散布図
xlXYScatterLinesNoMarkers折れ線付き散布図(データマーカーなし)
xlXYScatterSmooth平滑線付き散布図
xlXYScatterSmoothNoMarkers平滑線付き散布図(データマーカーなし)

 

≪データ行列の入れ替え≫

この部分はグラフ表示上で入れ替える必要がなければ実行しなくても良いです。
本サンプルでは合計データを2軸表示する都合上、入れ替えをしています。

Select Case .PlotBy
Case xlRows
.PlotBy = xlColumns
Case xlColumns
.PlotBy = xlRows
End Select

この記述内にあるPlotByはデータをプロットする方向を指定するものなので、
xlRows(行)⇔xlColumns(列)となるように入れ替えています。

 

≪名前の設定≫

ここでいう名前とはグラフ名になります。
特に記述しなければグラフ1、グラフ2・・・と言う名前が設定されていきますので、特に支障がなければ敢えて設定しなくても大丈夫です。

With Worksheets(“Sheet2”).ChartObjects(1)
.Name = “出荷数量”

この部分の.Nameプロパティを使用して名前を設定します。

グラフを選択すると赤丸部に名前が表示されています。

 

≪グラフタイトル≫

先ずタイトルの表示をする処理は

With .Chart
.HasTitle = True

この部分のTrue指定で表示されます。

タイトルに関する処理としては、

With .ChartTitle
.Text = “【上期】出荷数量”
.Font.Size = 12
End With

.ChartTitle.Textの形で組み合わせることでタイトルの文字列を設定します。

◆Sample2

この部分では軸ラベルを表示します。

Call Sample3の前で止めた状態ですが、赤丸部に軸ラベル(凡例)が表示されています。

With Worksheets(“Sheet2”).ChartObjects(1).Chart _
.Axes(xlCategory)
.HasTitle = True
.AxisTitle.Text = “(品番別出荷数)”
.AxisTitle.Font.Size = 9
End With

先ず項目軸に対する処理として.Axes(xlCategory) とし、.HasTitle = Trueで表示した後に
グラフの軸ラベルを表す.AxisTitleとテキスト.Textを組み合わせて文字列を設定します。

◆Sample3

ここでは指定した系列を第2軸に表示する処理を行います。
本サンプルでは「合計」データを折れ線グラフとして表示します。

With Worksheets(“Sheet2”).ChartObjects(1).Chart
.HasAxis(xlValue, xlSecondary) = True
With .SeriesCollection(“合計”)
.ChartType = xlLine
.AxisGroup = xlSecondary
End With
End With

先ず.HasAxis(xlValue, xlSecondary) = Trueで数値軸(xlValue)、第2軸(xlSecondary)を表示設定し、.SeriesCollection(“合計”) で「合計」系列を選択、.ChartType = xlLine で折れ線グラフ指定、.AxisGroup = xlSecondaryで第2軸に設定することで「合計」データが第2軸に表示されるものです。

ちなみに.HasAxisの項目軸はxlCategory、主軸ならxlPrimaryとなります。

4.まとめ

VBAを使って指定した様式にデータを収集し、その処理の中で今回のサンプルの様な処理を織り込むことでグラフ化も合わせて出来るのではないかと思います。
一度ベースを作ってしまえば臨機応変に対処できるのでお薦めです。
私の場合、特に第2軸を使う頻度は少なくないので製造部門管理用グラフ等で使用してます。




以上、VBAでのグラフ化に関する内容でした。
今回の記事が何かの参考になれば幸いです。

Ryo

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