Excel VBA에서 꺾은선형 차트를 동적으로 만들고 싶습니다.

자신의 비망을 겸해 기재를 실시하고 있습니다.
「일단 움직였다」정도의 소스등도 있으므로 참고 정도에 브러시 업 받을 수 있으면 다행입니다.
또, 잘못이나 더 좋은 코딩이나 예쁜 쓰는 방법이 있는 등 지적 받을 수 있으면 매우 기쁩니다.

이번 주제



Excel에서 데이터 분석을 할 때 시각화를 수행하고 싶은 선 그래프로 만들려고합니다.

요점은


  • 표의 데이터를 기반으로 선 그래프로 표기
  • 오른쪽 끝에 데이터 레이블 지정
  • ↑ 이외의 데이터 라벨 필요 없음
  • 범례 표시 필요 없음
  • 그늘은 모든 스타일을 적용합니다
  • 대상 데이터 (표)는 각각 별도의 시트로한다

  • 이런 느낌으로 시작할까 생각합니다.

    대상 데이터는



    서버의 리소스 상황을 과정에서 다음과 같이 되어 있습니다.

    서버 X 시트


    날짜
    용량(MB)
    사용량(MB)
    잔량(MB)
    사용률(%)


    2019/9/1
    51,200
    31,825
    19,375
    62%

    2019/9/2
    51,200
    33,625
    17,575
    66%

    2019/9/3
    51,200
    34,570
    16,630
    68%


    이러한 데이터를 3 시트 준비했습니다.

    그럼 소스입니다.



    Module1
    Option Explicit
    
    Sub btnPush()
    
        Dim ServerNames() As String
        Dim ServerName    As Variant
        Dim loopCnt       As Integer
    
        ServerNames = Split("サーバA;サーバB;サーバC", ";")
    
        ' グラフを追加
        ActiveSheet.Shapes.AddChart.Select
        ' グラフの種類を指定(折れ線グラフ)
        ActiveChart.ChartType = xlLine
        ' 一度グラフの書式をクリア
        ActiveChart.ClearToMatchStyle
        ' グラフのテーマを指定
        ActiveChart.ChartStyle = 227
    
        loopCnt = 1
        ' サーバ数分ループ
        For Each ServerName In ServerNames()
            ' 新しい系列を追加
            ActiveChart.SeriesCollection.NewSeries
            ' 系列名を指定
            ActiveChart.FullSeriesCollection(loopCnt).Name = "=""" & ServerName & """"
            ' 系列値を指定(縦軸)
            ActiveChart.FullSeriesCollection(loopCnt).Values = "=" & ServerName & "!$F$3:$F$12"
            ' 項目を指定(横軸)
            ActiveChart.FullSeriesCollection(loopCnt).XValues = "=" & ServerName & "!$B$3:$B$12"
    
            loopCnt = loopCnt + 1
        Next ServerName
    
        ' グラフをアクティブにする
        ActiveSheet.ChartObjects(1).Activate
        ' グラフタイトルの表示
        ActiveChart.SetElement (msoElementChartTitleAboveChart)
        ' グラフタイトルの指定
        ActiveChart.ChartTitle.Text = "リソース推移"
        ' 凡例の非表示
        ActiveChart.SetElement (msoElementLegendNone)
        ' データラベルを非表示
        ActiveChart.SetElement (msoElementDataLabelNone)
        ' グラフの最小値の指定
        ActiveChart.Axes(xlValue).MinimumScale = 0 / 100    ' 元データがパーセンテージの為、100分の1に
        ' グラフの最大値の指定
        ActiveChart.Axes(xlValue).MaximumScale = 100 / 100  ' 元データがパーセンテージの為、100分の1に
    
        ' データラベルを表示する為、右端を空ける
        ActiveChart.PlotArea.Width = ActiveChart.PlotArea.Width - 35
    
        ' 右端にデータラベルを表示
        ' 系列数分ループ
        For loopCnt = 1 To ActiveChart.SeriesCollection.Count
            With ActiveChart.SeriesCollection(loopCnt)
                ' 系列の一番最後のポイントを選択
                .Points(.Points.Count).Select
                ' データラベルの表示
                ActiveChart.SetElement (msoElementDataLabelCallout)
                ' 系列名表示
                .Points(.Points.Count).DataLabel.ShowSeriesName = True
                ' 分類名非表示
                .Points(.Points.Count).DataLabel.ShowCategoryName = False
                ' 系列値非表示
                .Points(.Points.Count).DataLabel.ShowValue = False
                ' 凡例マーカー非表示
                .Points(.Points.Count).DataLabel.ShowLegendKey = False
                ' データラベルの背景色を凡例マーカーの色に合わせる
                .Points(.Points.Count).DataLabel.Format.Fill.ForeColor = .Format.Line.ForeColor
                ' データラベルを選択
                .Points(.Points.Count).DataLabel.Select
            End With
            ' データラベルの表示位置を調整(気持ち右下に表示)
            Selection.Left = 10 + Selection.Left
            Selection.Top = 10 + Selection.Top
        Next loopCnt
    End Sub
    
    

    완성



    아래와 같은 그래프가 완성됩니다. (Excel 버전에 따라 그늘이 달라집니다.)

    좋은 웹페이지 즐겨찾기