【Excelマクロ(VBa)】グラフの作成


   既存シートにグラフを作成する(マニュアル編)


Excelマクロを使わず、マニュアルでグラフを作成する方法ですが、(1)既存シートに作成するか、(2)新しいシートに作成するかの2パターンあります。

まず既存シートにグラフを作成する方法をご紹介します。

手順としては、① データ領域を選択、② メニューバーの[挿入] - [折れ線] - (今回は)[マーカー付き折れ線]を選択します。



すると、下記グラフが同じシート内に表示されます。




   新しいシートにグラフを作成する(マニュアル編)


次に、新しいシートにグラフを作成する方法ですが、既存シートにグラフを作成した後、メニューバーの[デザイン] - [グラフの移動]を選択します。



下記「グラフの移動」というポップアップ画面が表示されるので、[新しいシート]を選択し[OK]をクリックします。



すると、下記グラフが新しいシートに全面表示されます。




   既存シートにグラフを作成する(マクロ編)


グラフの作成は、「ActiveSheet.Shapes.AddChart」を用います。
データ領域の指定は、「.Chart.SetSourceData Source:=」で指定し、グラフの種類は「.Chart.ChartType =」で指定します。

With ActiveSheet.Shapes.AddChart.Chart
  .SetSourceData Source:=ActiveSheet.Range(Cells(1, 1), Cells(5, 5))
  .ChartType = xlLineMarkers
End With


   新しいシートにグラフを作成する(マクロ編)


一方、新しいシートにグラフを作成する場合は、「ActiveWorkbook.Charts.Add」を用います。
データ領域の指定は、「.SetSourceData Source:=」で指定し、グラフの種類は「ActiveWorkbook.ActiveChart.ChartType =」で指定します。

ActiveWorkbook.Charts.Add.SetSourceData Source:=ActiveSheet.Range(Cells(1, 1), Cells(5, 5))
ActiveWorkbook.ActiveChart.ChartType = xlLineMarkers


   【例】グラフを作成するには


新しいExcelを開き、下記の様な表を作成してから、新しいシートにグラフを作成する処理をご紹介します。


  ↓


Excelマクロで、表の作成(罫線処理は除外)からグラフまで作成する処理をコーディングすると、下記のようになります。

'Excel新規ブックを起動
Dim AppExcel As Excel.Application
Dim AppSheetName As String
Dim LineX, LineY, i, j As Integer

Set AppExcel = New Excel.Application
'ブックを新規追加
AppExcel.Workbooks.Add
'シート名の取得
AppSheetName = AppExcel.ActiveSheet.Name

LineX = 5
LineY = 5

'セルは(1, 1)開始のため、(i, j)の開始を(1, 1)とする
For i = 1 To LineX
  For j = 1 To LineY
    '1行目:年月
    If i = 1 Then
      Select Case j
        Case 2:
          AppExcel.Cells(i, j) = "'2017/04"
        Case 3:
          AppExcel.Cells(i, j) = "'2017/05"
        Case 4:
          AppExcel.Cells(i, j) = "'2017/06"
        Case 5:
          AppExcel.Cells(i, j) = "'2017/07"
      End Select
    '1列目:くだもの
    ElseIf j = 1 Then
      Select Case i
        Case 2:
          AppExcel.Cells(i, j) = "リンゴ"
        Case 3:
          AppExcel.Cells(i, j) = "みかん"
        Case 4:
          AppExcel.Cells(i, j) = "バナナ"
        Case 5:
          AppExcel.Cells(i, j) = "ぶどう"
      End Select
    '1行目・1列目以外:行数 + 列数
    Else
      AppExcel.Cells(i, j) = i + j
    End If
  Next j
Next i

'グラフの作成
AppExcel.Charts.Add.SetSourceData _
  Source:=AppExcel.Sheets(AppSheetName).Range(AppExcel.Cells(1, 1), AppExcel.Cells(LineX, LineY))

'グラフのインデックスを取得
ChartIndex = AppExcel.ActiveChart.Index

'グラフの各種設定をする
With AppExcel.Charts(ChartIndex)
  '折れ線グラフ
  .ChartType = xlLineMarkers
  '凡例を上に配置
  .SetElement (msoElementLegendTop)
  'タイトルを表示
  .HasTitle = True
  'タイトルを設定
  .ChartTitle.Text = "くだもの"
End With

グラフの作成処理は「グラフの作成」とコメントしてある処理からで、カーソルがデータソース上にあれば「.SetSourceData」以下の設定を省略してもグラフを作成する事ができます。

その後、グラフを操作する場合、ActiveChartと定義するよりインデックスを取得して、そのインデックスを基に操作をする方が誤りがありません。

管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す