글목록

2021년 5월 16일

Module 6. 엑셀 차트 일괄적으로 그리기 - (6) 실행 매크로 작성하기

실제 매크로로 사용할 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
   
  '현재의 시트와 선택 영역에 대해 X, Y열의 주기적 배열, header를 지정해줍니다.
  Set tSh = ActiveSheet
  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("차트 종류를 입력하세요." & 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
'---------------------------------------------


위의 함수는 실제로 실행시켜보시면 차트 내 모든 데이터에 대하여 동일한 형태의 그래프로 그리도록 되어 있으나, 필요하다면 그래프마다 종류를 다르게 입력받도록 할 수도 있습니다. 예를 들어, 3개의 데이터쌍을 1개 차트로 그리는데, 1번은 점 분산, 2번과 3번은 직선형으로 차트를 그릴 수 있도록, 그래프 수에 해당하는 만큼 차트 종류를 입력받을 수 있게 만든다면 좀더 유연한 매크로가 될 수 있습니다.

여기서 소개드리는 매크로는 어디까지나 반복된 작업을 빠르게 처리하고, 숫자로만 주어진 데이터들을 조금은 가시적으로 확인할 수 있는 도구로 활용할 목적이며, 이러한 작업으로부터 데이터들의 특성이 파악되고 나면, 조금더 기능이 많고 그래픽적으로도 우수한 다른 소프트웨어로 필요한 데이터만 가져가서 차트를 그린다면 시간이 많이 절약될 수 있을 것입니다.

댓글 없음:

댓글 쓰기

의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~

많이 본 글 :