실제 매크로로 사용할 Sub 프로시저를 작성하도록 하겠습니다.
데이터의 형태는 주기적으로 XYY... XYY... 와 같은 형태로 배열되어 있고, 이 데이터들을 X, Y 데이터쌍으로 지정해준 후, 몇 개의 그래프를 1개 차트로 그릴지 입력받아서 일괄적으로 차트를 그리는 것입니다. 이전에 만들어두었던 여러가지 function을 조합하여 작성한 것이므로, 생소한 함수들은 제 블로그의 검색을 통해 쉽게 찾으실 수 있을 것입니다.
'---------------------------------------------
Sub DrawScatterChart()
On Error GoTo ErrorHandler
Dim tSh As Worksheet, tChart As Chart, tXCol() As Range, tYCol() As Range, tHN As Integer, tN As Long
Dim i As Long, j As Long, tStr As String, tPN As Long, tChartType As Long, tFN As Long
On Error GoTo ErrorHandler
Dim tSh As Worksheet, tChart As Chart, tXCol() As Range, tYCol() As Range, tHN As Integer, tN As Long
Dim i As Long, j As Long, tStr As String, tPN As Long, tChartType As Long, tFN As Long
'현재의 시트와 선택 영역에 대해 X, Y열의 주기적 배열, header를 지정해줍니다.
Set tSh = ActiveSheet
tN = SelectedColIntoXYPair(tXCol, tYCol, tHN)
If tN < 1 Then GoTo ErrorHandler
tN = SelectedColIntoXYPair(tXCol, tYCol, tHN)
If tN < 1 Then GoTo ErrorHandler
'X, Y 데이터쌍을 지정했다면, 몇개의 데이터쌍(tPN)을 1개 차트에 그려줄 것인지 지정합니다.
tStr = InputBox("1개의 차트에 표시할 그래프 수를 입력하세요.", "그래프 수 입력", 1)
If StrPtr(tStr) = 0 Then GoTo ErrorHandler
tPN = Int(Val(tStr)): If tPN < 1 Then tPN = 1
tStr = InputBox("1개의 차트에 표시할 그래프 수를 입력하세요.", "그래프 수 입력", 1)
If StrPtr(tStr) = 0 Then GoTo ErrorHandler
tPN = Int(Val(tStr)): If tPN < 1 Then tPN = 1
'차트 종류는 선, 점, 점+선 형태의 분산차트 중 선택하도록 하며, 개인적으로 많이 사용하는 차트 종류를 선택할 수 있도록 변경하시면 됩니다. 필요하면 추후에 차트 종류를 일괄적으로 바꿔주셔도 됩니다.
tStr = InputBox("차트 종류를 입력하세요." & vbCrLf & "Line : 1, Marker : 2, Marker+Line : 3", "형식 선택", 1)
Select Case tStr
Case "1"
tChartType = xlXYScatterLinesNoMarkers
Case "2"
tChartType = xlXYScatter
Case "3"
tChartType = xlXYScatterLines
Case Else
tChartType = xlXYScatterLines
End Select
tStr = InputBox("차트 종류를 입력하세요." & vbCrLf & "Line : 1, Marker : 2, Marker+Line : 3", "형식 선택", 1)
Select Case tStr
Case "1"
tChartType = xlXYScatterLinesNoMarkers
Case "2"
tChartType = xlXYScatter
Case "3"
tChartType = xlXYScatterLines
Case Else
tChartType = xlXYScatterLines
End Select
'1개 차트에 그릴 그래프 수(tPN)를 step으로 하여 차트를 생성하고, tPN-1개만큼의 데이터쌍은 단순히 차트에 추가해주는 방법으로 차트를 만들어줍니다.
Call CalcModeOn(True)
For i = 1 To tN Step tPN
Set tChart = ScatterChart_New(tXCol(i), tYCol(i), tHN, tChartType)
tFN = i + tPN - 1
If tFN > tN Then tFN = tN
For j = i + 1 To tFN
ScatterChart_Add tChart, tXCol(j), tYCol(j), tHN, tChartType
Next
Next
ErrorHandler:
Call CalcModeOn(False)
Erase tXCol, tYCol
End Sub
'---------------------------------------------For i = 1 To tN Step tPN
Set tChart = ScatterChart_New(tXCol(i), tYCol(i), tHN, tChartType)
tFN = i + tPN - 1
If tFN > tN Then tFN = tN
For j = i + 1 To tFN
ScatterChart_Add tChart, tXCol(j), tYCol(j), tHN, tChartType
Next
Next
ErrorHandler:
Call CalcModeOn(False)
Erase tXCol, tYCol
End Sub
위의 함수는 실제로 실행시켜보시면 차트 내 모든 데이터에 대하여 동일한 형태의 그래프로 그리도록 되어 있으나, 필요하다면 그래프마다 종류를 다르게 입력받도록 할 수도 있습니다. 예를 들어, 3개의 데이터쌍을 1개 차트로 그리는데, 1번은 점 분산, 2번과 3번은 직선형으로 차트를 그릴 수 있도록, 그래프 수에 해당하는 만큼 차트 종류를 입력받을 수 있게 만든다면 좀더 유연한 매크로가 될 수 있습니다.
여기서 소개드리는 매크로는 어디까지나 반복된 작업을 빠르게 처리하고, 숫자로만 주어진 데이터들을 조금은 가시적으로 확인할 수 있는 도구로 활용할 목적이며, 이러한 작업으로부터 데이터들의 특성이 파악되고 나면, 조금더 기능이 많고 그래픽적으로도 우수한 다른 소프트웨어로 필요한 데이터만 가져가서 차트를 그린다면 시간이 많이 절약될 수 있을 것입니다.
댓글 없음:
댓글 쓰기
의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~