X, Y열 및 header 갯수를 정의해둔 상태에서 분산 차트를 그리는 function을 작성합니다. X, Y열을 데이터만 포함하도록 다듬은 후 새 차트를 생성하고, 여러 데이터를 1개 차트에 포함하기 위해서는 이 차트에 계속해서 추가하는 방식으로 차트를 생성할 것입니다.
우선 새 차트를 생성하는 function은 아래와 같이 작성하였습니다.
'------------------------------------------------
Dim tSh As Worksheet, tChart As Chart, tXY() As Range, tStr() As String, tFormula As String, i As Long
Set tSh = iYCol.Worksheet
tSh.Activate
'이전 글에서 작성한 바와 같이, X, Y열 정보를 다듬어준 후, Y열을 선택하고 차트를 삽입해줍니다. 차트를 삽입하면, 엑셀에서 자동으로 선택영역을 해석하여 차트로 그려주는데, 이후 자동으로 그려진 차트를 원하는 X, Y열 및 데이터명으로 바꿔주면 됩니다.
tXY(2).Select
Set tChart = tSh.Shapes.AddChart.Chart
With tChart
.ChartType = iChartType
tStr(2) = tStr(0) & "!" & tXY(1).Address
tStr(3) = tStr(0) & "!" & tXY(2).Address
tFormula = "=SERIES("
For i = 1 To 4
tFormula = tFormula & tShName & tStr(i)
If i < 4 Then tFormula = tFormula & ","
Next
tFormula = tFormula & ")"
.SeriesCollection(1).Formula = tFormula
.ChartArea.Top = tXY(2).Offset(5, 0).Top
.ChartArea.Left = tXY(2).Left
End With
Set ScatterChart_New = tChart
Erase tXY, tStr
End Function
'------------------------------------------------
위의 function을 이용하여 차트를 그리면 아래와 같이 데이터가 있는 부분만 차트를 형성하게 됩니다.
위 function에서 SeriesCollection(1).Name, SeriesCollection(1).XValues, SeriesCollection(1).Values를 이용하여 1번 그래프의 데이터 범위를 지정해주면 쉽게 차트를 그릴 수 있습니다. 그런데, 왜 복잡하게 Series() 함수를 분해하고 다시 조합하는지 의문이 드실 수 있습니다.
우선, SeriesCollection(1).Name에는 주소를 입력하게 되면, 해당 셀의 데이터만 읽어와서 대입해주며, 2개 이상의 셀을 데이터명으로 지정하지 못합니다. 차트를 그리는 것은 문제가 없을 수 있지만, 이후 매크로를 이용해 차트를 변경하거나, 데이터 위치를 변경하는 등의 작업을 할 때, 엑셀에서 제공하는 method나 property를 이용하는 것보다 Series 함수를 직접 핸들링하는 것이 훨씬 간편해지기 때문에 이렇게 작성하였습니다.
Series 또는 SeriesCollection과 관련된 Method, Property를 확인하시려면, https://docs.microsoft.com/ko-kr/office/vba/api/excel.series(object)을 참고하시기 바랍니다.
댓글 없음:
댓글 쓰기
의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~