글목록

2021년 6월 15일

Module 7. 여러 차트를 일괄 변경하기 - (4)차트 크기 동일하게 맞추기

엑셀의 워크시트에 삽입된 차트는 그 속성을 보더라도 차트 크기를 지정하는 메뉴를 찾기가 쉽지 않습니다. 1개 정도는 대충 마우스로 크기를 맞춘다하더라도 여러 개의 차트 크기를 맞추려면 비슷하게는 맞출 수 있지만, 정확하게 맞추기 어렵습니다.

만약, 차트 속성을 고정으로 하지 않은 상태에서 사용자가 어쩌다 차트가 걸쳐있는 행이나 열을 삭제/삽입하거나 폭이나 높이를 바꾸게 되면 차트 크기도 함께 변하게 되는데, 크기가 달라진 차트를 동일하게 맞추려해도 크기 지정하는 옵션을 찾지 못해서 크기가 제멋대로 변해버린 상태가 되는 경우가 발생합니다. 여러 개의 차트를 만들고, 그림으로 변환하거나 문서 작성을 위해 복사하려는데 차트 크기가 서로 다르면 보기가 좋지 않겠지요.


이번에 소개할 내용은 차트 크기를 일괄적으로 변경하는 매크로입니다.

'------------------------------------

Sub ChangeChartSize()
  On Error Resume Next
  Dim i As Long, tChart() As Chart, tShape As ShapeRange, tAR As Single, tStr As String, tSplit, tVal
  '일단 여러개의 차트를 선택한 상태에서 차트만 ShapeRange로 변수에 할당하여 목록을 만들어둡니다.
  If SelectionToChartArray(tChart, True) = False Then GoTo ErrorHandler
  Set tShape = ChartArrayToShapeRange(tChart)
  '차트 비율을 4/3, 16/9와 같이 일정한 비율로 바꾸고 싶다면, 차트 비율을 입력받습니다. 분수 형태가 아닌 가로:세로 비율을 숫자로 입력받을 수도 있으며, 만약 입력 취소하거나 0 또는 숫자가 아닌 값이 입력되면 비율 변경을 하지 않도록 합니다.
  tStr = InputBox("차트 크기 비율을 재설정하시겠습니까?" & vbCrLf & "차트의 '가로/세로' 비율을 입력하세요.", "차트 가로/세로 비율", "4/3")
  tAR = 0
  If StrPtr(tStr) <> 0 Then
    tSplit = Split(tStr, "/")
    If UBound(tSplit) = 0 Then
      If Val(tSplit(0)) <> 0 Then tAR = Abs(Val(tSplit(0)))
    Else
      If Not (Val(tSplit(0)) = 0 And Val(tSplit(1)) = 0) Then tAR = Abs(Val(tSplit(0)) / Val(tSplit(1)))
    End If
  End If
  '차트 가로/세로 비율이 입력되었다면, 1번 차트의 비율을 변경합니다. 현재 매크로는 세로 길이를 고정하고, 가로 길이를 변경하는 방법으로 비율을 조정합니다. 만약 차트 속성에서 가로/세로 비율을 고정되어있다면 가로 길이를 변경하면 세로가 함께 변경되므로, 속성을 일단 변경해준 후, 크기 변경하고 다시 속성값을 되돌려줍니다.
  If tAR <> 0 Then
    With tShape(i)
      tVal = .LockAspectRatio
      .LockAspectRatio = msoFalse
      .Width = .Height * tAR
      .LockAspectRatio = tVal
    End With
  End If
  '2번째 차트부터는 1번 차트의 크기 속성을 그대로 복사해줍니다.
  For i = 2 To tShape.Count
    With tShape(i)
      tVal = .LockAspectRatio
      .LockAspectRatio = msoFalse
      .Width = tShape(1).Width
      .Height = tShape(1).Height
      .LockAspectRatio = tVal
    End With
  Next
ErrorHandler:
  Erase tChart
End Sub

'------------------------------------

이상과 같이, 차트의 크기를 변경하기 위해서는 해당 차트를 포함한 Shape의 크기를 변경하여 차트 트기를 변경합니다.

만약, 차트의 각 구성 요소를 변경하고 싶다면, 아래와 같이 차트의 각 요소에 해당하는 object를 확인하시고, 각각에 대한 속성을 변경하게 되면 차트를 자유롭게 설정할 수 있습니다. 아래에 나타낸 것 이외에도 다양한 속성들이 있으나, 직관적으로 보이는 부분만 나타내었으며, https://docs.microsoft.com/en-us/office/vba/api/excel.chart(object)를 참고하셔서 본인에게 필요한 기능을 포함하는 다양한 매크로를 작성하여 활용할 수 있을 것입니다. 









댓글 없음:

댓글 쓰기

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

많이 본 글 :