수색…
범위와 고정 된 이름으로 차트 만들기
차트 데이터를 정의하는 Series
개체를 직접 사용하여 차트를 만들 수 있습니다. 존재하지 않는 차트가없는 Series
를 얻으려면 주어진 Worksheet
에 ChartObject
를 만든 다음 Chart
개체를 가져옵니다. Series
개체로 작업 할 때의 장점은 Range
개체를 참조하여 Values
및 XValues
를 설정할 수 있다는 것입니다. 이러한 데이터 속성은 해당 범위에 대한 참조가있는 Series
를 적절하게 정의합니다. 이 방식의 단점은 Name
설정할 때 동일한 변환이 처리되지 않는다는 것입니다. 고정 값입니다. 원래 Range
의 기본 데이터로 조정되지 않습니다. SERIES
수식을 확인하면 이름이 고정되어 있음이 분명합니다. SERIES
수식을 직접 작성하여 처리해야합니다.
차트를 만드는 데 사용되는 코드
이 코드에는 Chart
및 Worksheet
대한 추가 변수 선언이 포함되어 있습니다. 사용하지 않을 경우 생략 할 수 있습니다. 그러나 스타일이나 다른 차트 속성을 수정하는 경우 유용 할 수 있습니다.
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 수식을 수정하여 차트 만들기
새 Chart
및 Series
객체 (특히 동적 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
전파됩니다.
그리드에 차트 정렬
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
여러 차트의 결과
이 그림은 차트의 원래 무작위 레이아웃과 위의 코드를 실행 한 그리드를 보여줍니다.
전에
후