여러 개의 데이터쌍을 비교하기 위해 1개의 차트에 여러 데이터를 동시에 표시하는 것이 필요할 수 있습니다. 이전 글에서 1개의 데이터쌍으로부터 분산차트를 생성하였고, 이번 글에서는 이미 생성된 차트에 새로운 데이터쌍을 추가하는 기능을 만들려고 합니다.
'----------------------------------------------
Function ScatterChart_Add(iChart As Chart, iXCol As Range, iYCol As Range, iHeader As Integer, Optional iChartType As Long = xlXYScatterLinesNoMarkers) As Chart
Dim tXY() As Range, tStr() As String, tFormula As String, i As Long, n As Long
Dim tXY() As Range, tStr() As String, tFormula As String, i As Long, n As Long
'생성된 차트를 입력받고, 새로 추가할 X, Y열 및 header에 대한 정보를 받아 X, Y열의 빈 셀을 제거하여 다듬어 줍니다.
tXY = TrimXYRange(iXCol, iYCol, iHeader)
'입력받은 차트에 새로운 데이터 시리즈를 추가해주고, 새 시리즈의 순서를 확인합니다.
'입력받은 차트에 새로운 데이터 시리즈를 추가해주고, 새 시리즈의 순서를 확인합니다.
iChart.SeriesCollection.NewSeries
n = iChart.SeriesCollection.Count
n = iChart.SeriesCollection.Count
'차트에 사용된 데이터의 시트명을 확인합니다.
tStr = SplitChartSeriesFormula(iChart.SeriesCollection(n - 1).Formula, True)
'새 데이터에 대하여, 차트 종류를 지정하고, 차트를 생성할 때와 동일한 방법으로 Series() 함수를 생성한 후, NewSeries의 formula를 지정해줍니다.
tStr = SplitChartSeriesFormula(iChart.SeriesCollection(n - 1).Formula, True)
'새 데이터에 대하여, 차트 종류를 지정하고, 차트를 생성할 때와 동일한 방법으로 Series() 함수를 생성한 후, NewSeries의 formula를 지정해줍니다.
With iChart.SeriesCollection(n)
.ChartType = iChartType
If Not tXY(0) Is Nothing Then tStr(1) = tStr(0) & "!" & tXY(0).Address
tStr(2) = tStr(0) & "!" & tXY(1).Address
tStr(3) = tStr(0) & "!" & tXY(2).Address
tStr(4) = n
tFormula = "=SERIES("
For i = 1 To 4
tFormula = tFormula & tShName & tStr(i)
If i < 4 Then tFormula = tFormula & ","
Next
tFormula = tFormula & ")"
.Formula = tFormula
End With
Set ScatterChart_Add = iChart
Erase tXY, tStr
End Function
.ChartType = iChartType
If Not tXY(0) Is Nothing Then tStr(1) = tStr(0) & "!" & tXY(0).Address
tStr(2) = tStr(0) & "!" & tXY(1).Address
tStr(3) = tStr(0) & "!" & tXY(2).Address
tStr(4) = n
tFormula = "=SERIES("
For i = 1 To 4
tFormula = tFormula & tShName & tStr(i)
If i < 4 Then tFormula = tFormula & ","
Next
tFormula = tFormula & ")"
.Formula = tFormula
End With
Set ScatterChart_Add = iChart
Erase tXY, tStr
End Function
'----------------------------------------------
차트를 추가하는 것은 별도의 작업이 필요없기 때문에 그다지 길지 않은 코드만으로도 작성이 가능합니다. 이번에도 Name, XValues, Values라는 porperty를 지정하지 않고, Series() 함수를 바로 생성해서 대입하는 방식으로 차트를 추가했습니다.
이전 글의 차트 생성 함수와 위의 그래프 추가 함수를 이용한 예를 들어 보도록 하겠습니다.
'----------------------------------------------
Sub Test()
Dim tChart As Chart, tX As Range, tY As Range, tHN As Integer
tHN = 1
Set tX = ActiveSheet.Columns(1)
Set tY = ActiveSheet.Columns(2)
Set tChart = ScatterChart_New(tX, tY, tHN, xlXYScatterLinesNoMarkers)
Set tX = ActiveSheet.Columns(3)
Set tY = ActiveSheet.Columns(4)
ScatterChart_Add tChart, tX, tY, tHN, xlXYScatter
End Sub
Dim tChart As Chart, tX As Range, tY As Range, tHN As Integer
tHN = 1
Set tX = ActiveSheet.Columns(1)
Set tY = ActiveSheet.Columns(2)
Set tChart = ScatterChart_New(tX, tY, tHN, xlXYScatterLinesNoMarkers)
Set tX = ActiveSheet.Columns(3)
Set tY = ActiveSheet.Columns(4)
ScatterChart_Add tChart, tX, tY, tHN, xlXYScatter
End Sub
'----------------------------------------------
위와 같이 A, B열은 직선형으로, C, D열은 점 형태로 1개의 분산 차트를 그릴 수 있습니다.
다음 글에서는 차트 생성 및 데이터 추가 함수를 이용하여 일괄적으로 차트를 추가하는 매크로를 작성하도록 하겠습니다
댓글 없음:
댓글 쓰기
의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~