수색…


범위와 고정 된 이름으로 차트 만들기

차트 데이터를 정의하는 Series 개체를 직접 사용하여 차트를 만들 수 있습니다. 존재하지 않는 차트가없는 Series 를 얻으려면 주어진 WorksheetChartObject 를 만든 다음 Chart 개체를 가져옵니다. Series 개체로 작업 할 때의 장점은 Range 개체를 참조하여 ValuesXValues 를 설정할 수 있다는 것입니다. 이러한 데이터 속성은 해당 범위에 대한 참조가있는 Series 를 적절하게 정의합니다. 이 방식의 단점은 Name 설정할 때 동일한 변환이 처리되지 않는다는 것입니다. 고정 값입니다. 원래 Range 의 기본 데이터로 조정되지 않습니다. SERIES 수식을 확인하면 이름이 고정되어 있음이 분명합니다. SERIES 수식을 직접 작성하여 처리해야합니다.

차트를 만드는 데 사용되는 코드

이 코드에는 ChartWorksheet 대한 추가 변수 선언이 포함되어 있습니다. 사용하지 않을 경우 생략 할 수 있습니다. 그러나 스타일이나 다른 차트 속성을 수정하는 경우 유용 할 수 있습니다.

Sub CreateChartWithRangesAndFixedName()

    Dim xData As Range
    Dim yData As Range
    Dim serName As Range
    
    'set the ranges to get the data and y value label
    Set xData = Range("B3:B12")
    Set yData = Range("C3:C12")
    Set serName = Range("C2")
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (48, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
    
    'get reference to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries
    
    ser.Values = yData
    ser.XValues = xData
    ser.Name = serName
    
    ser.ChartType = xlXYScatterLines

End Sub

코드 실행 후 원본 데이터 / 범위 및 결과 Chart

SERIES 수식에는 계열 이름을 작성한 Range 에 대한 참조 대신 시리즈 이름에 대한 "B" 포함됩니다.

데이터 및 결과 차트

빈 차트 만들기

대다수 차트 코드의 출발점은 빈 Chart 를 만드는 것입니다. 이 Chart 는 활성 상태이고 템플릿이 수정 된 경우 실제로 비어 있지 않을 수도있는 기본 차트 템플릿의 영향을받습니다.

ChartObject 의 핵심은 그 위치를 결정하는 것입니다. 이 호출 구문은 ChartObjects.Add(Left, Top, Width, Height) 입니다. ChartObject 가 생성되면 Chart 개체를 사용하여 실제로 차트를 수정할 수 있습니다. ChartObject 는 시트에 차트를 배치하는 Shape 처럼 동작합니다.

빈 차트를 만드는 코드

Sub CreateEmptyChart()
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (0, 0) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(0, 0, 400, 300)
    
    'get refernce to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'additional code to modify the empty chart
    '...

End Sub

결과 차트

빈 차트 예제

SERIES 수식을 수정하여 차트 만들기

ChartSeries 객체 (특히 동적 Series 이름)를 완벽하게 제어하려면 SERIES 수식을 직접 수정해야합니다. Range 객체를 설정하는 프로세스는 간단하며 주요 장애물은 단순히 SERIES 수식의 문자열 작성입니다.

SERIES 수식의 구문은 다음과 같습니다.

=SERIES(Name,XValues,Values,Order)

이러한 내용은 참조 또는 데이터 항목의 배열 값으로 제공 할 수 있습니다. Order 는 차트 내의 계열 위치를 나타냅니다. 데이터에 대한 참조는 시트 이름으로 완전하게 지정되지 않으면 작동하지 않습니다. 작동중인 수식의 예를 보려면 기존 시리즈를 클릭하고 수식 입력 줄을 확인하십시오.

SERIES 수식을 사용하여 차트를 만들고 데이터를 설정하는 코드

SERIES 수식을 작성하기위한 문자열 작성은 .Address(,,,True) 합니다. 이렇게하면 외부 범위 참조가 사용되어 시트 이름의 정규화 된 주소가 포함됩니다. 시트 이름을 제외하면 오류가 발생합니다 .

Sub CreateChartUsingSeriesFormula()

    Dim xData As Range
    Dim yData As Range
    Dim serName As Range
    
    'set the ranges to get the data and y value label
    Set xData = Range("B3:B12")
    Set yData = Range("C3:C12")
    Set serName = Range("C2")
    
    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    'create a new ChartObject at position (48, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
    
    'get refernce to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart
    
    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries
    
    'set the SERIES formula
    '=SERIES(name, xData, yData, plotOrder)
    
    Dim formulaValue As String
    formulaValue = "=SERIES(" & _
        serName.Address(, , , True) & "," & _
        xData.Address(, , , True) & "," & _
        yData.Address(, , , True) & ",1)"
    
    ser.Formula = formulaValue
    ser.ChartType = xlXYScatterLines

End Sub

원본 데이터 및 결과 차트

이 차트의 경우 계열 이름이 원하는 셀 범위로 올바르게 설정됩니다. 즉, 업데이트가 Chart 전파됩니다.

SERIES 수식의 데이터 및 차트

그리드에 차트 정렬

Excel의 차트를 사용하는 일반적인 일은 한 장에 여러 차트의 크기와 레이아웃을 표준화하는 것입니다. 수동으로 수행하는 경우 크기 조정 또는 셀 경계에 "고수"로 차트를 이동하는 동안, 당신은 ALT를 누르고 있습니다. 이 작업은 몇 가지 차트에서 가능하지만 VBA 방식은 훨씬 간단합니다.

그리드를 생성하는 코드

이 코드는 지정된 (위쪽, 왼쪽) 위치, 정의 된 수의 열 및 정의 된 공통 차트 크기로 시작하는 차트 그리드를 만듭니다. 차트는 생성 된 순서대로 배치되고 모서리를 감싸 새로운 행을 형성합니다.

Sub CreateGridOfCharts()

    Dim int_cols As Integer
    int_cols = 3
    
    Dim cht_width As Double
    cht_width = 250
        
    Dim cht_height As Double
    cht_height = 200
    
    Dim offset_vertical As Double
    offset_vertical = 195
    
    Dim offset_horz As Double
    offset_horz = 40

    Dim sht As Worksheet
    Set sht = ActiveSheet

    Dim count As Integer
    count = 0
    
    'iterate through ChartObjects on current sheet
    Dim cht_obj As ChartObject
    For Each cht_obj In sht.ChartObjects
        
        'use integer division and Mod to get position in grid
        cht_obj.Top = (count \ int_cols) * cht_height + offset_vertical
        cht_obj.Left = (count Mod int_cols) * cht_width + offset_horz
        cht_obj.Width = cht_width
        cht_obj.Height = cht_height

        count = count + 1

    Next cht_obj
End Sub

여러 차트의 결과

이 그림은 차트의 원래 무작위 레이아웃과 위의 코드를 실행 한 그리드를 보여줍니다.

전에

여러 차트의 이미지 전에

차트 그리드



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow