배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
엑셀, 곽승주님의 오튜공구함 제작으로 배워보는 VBA 이야기, Excel
  

19. 수식과 차트 매크로

자료다운로드 : 오튜공구함019.xls 

안녕하세요, 오튜 가족 여러분! 드디어 오늘로써 오튜공구함 연재를 마치게 되었습니다. 그래서 강의에 앞서 미리 끝내는 인사를 드립니다. 작년에 시작한 걸 이제 끝내고 나니 감회가 새롭습니다. 저의 능력과 노력 부족으로 완성하지 못한 기능이 있긴 하지만 여러분에게 많은 도움이 되었으면 합니다.

오늘은 수식과 차트에 관한 매크로를 다뤄보려고 합니다. 미리 양해의 말씀을 드릴 것이 있는데, 수식부분에서 중복IF문과 셀안에서 반복문을 만드는 걸 해보고 싶었는데, 엄두가 나질 않아 빼두었습니다.

먼저 동일 셀에 수식이 아닌 결과값을 복사하여 붙여넣는 기능입니다. 엑셀의 [선택하여 붙여넣기]기능에서 [값]을 선택하여 붙여넣기 해보셨다면 쉽게 아실 겁니다.

User_Procedures.Bas
Sub ConvertValues()
     ActiveCell.Select
     Selection.Copy
현재의 셀(ActiveCell)을 선택하고 그 내용을 클립보드로 복사합니다.
     Selection.PasteSpecial Paste:=xlValues, operation:=xlNone, skipblanks:=False, Transpose:=False
선택하여 붙여넣기 기능을 매크로로 표현하면 PasetSpecial메소드입니다.

Paste매개변수는 붙여넣기의 대상을 가리킵니다. 여기에선 값을 붙여넣을 것이므로 xlValue를 선택하였습니다. Operation은 위의 대화상자에서 [연산]에 해당하는 것입니다. 아무 연산이 없으므로 xlNone으로 합니다. SkipBlanks는 위의 대화상자에서 [내용있는 셀만 붙여넣기]에 해당합니다. Transpose는 설명 안드려도 아시겠죠~
     Application.CutCopyMode = False
CutCopyMode 프로퍼티는 Application개체의 것으로 잘라내기 상태인지 복사상태인지를 표시하는 것입니다. 사용자가 <Ctrl+C>키를 누르면 xlCopy값(1)을, <Ctrl+X>키를 누르면 xlCut값(2)을 가집니다. 믈론 아무 동작을 하지 않았다면 False값(0)을 돌려줍니다.
그런데 여기에 False값을 위의 코드처럼 대입하면 <Ctrl+C>키 또는 <Ctrl+X>키를 누를 때 표시되는 움직이는 점선(이것을 “이동 테두리”라고 합니다)이 사라지고 [붙여넣기] 기능도 사용할 수 없게 됩니다. 즉 아무 것도 하지 않은 상태로 됩니다.
End Sub

종종 수식이 복잡하거나 처음 보는 시트에서 어떻게 수식이 구성되었는지 보고 싶다면 수식의 결과값이 아닌 수식 자체가 보이도록 하는 것이 편할 것입니다. 이러한 설정은 [도구]-[옵션]을 클릭하여 [옵션]대화상자에서 합니다.

위의 대화상자에서 보시면 [화면 표시]탭페이지에서 [창 옵션]의 [수식]이라는 체크상자가 보일 것입니다. 이를 선택하면 다음 처럼 됩니다.

 
[수식]을 선택하지 않은 경우   [수식]을 선택한 경우

이것은 VBA에서 ActiveWindow개체의 DisplayFormulas프로퍼티입니다.

User_Procedures.Bas
Sub DisplayFormula()
     ActiveWindow.DisplayFormulas = Not ActiveWindow.DisplayFormulas
선택할떄마다 이전 값과 반대로 설정하므로 Not연산자를 사용합니다. 즉 현재가 참(거짓)이면 거짓(참)으로 같은 프로퍼티가 설정됩니다.

     If ActiveWindow.DisplayFormulas = True Then
          CheckMarkOntheMenu "수식보이기/숨기기", msoButtonDown
     Else
          CheckMarkOntheMenu "수식보이기/숨기기", msoButtonUp
     End If
이러한 설정상태를 메뉴에 표시해둬야 합니다. 그래서 CheckMarkOntheMenu(...)라는 프로시져에 표시할 메뉴이름(Caption)과 상태를 넘겨줍니다. (CheckMarkOntheMenu(...)는 user_menu.bas 모듈에 있습니다)

End Sub

이제 차트에 대한 매크로를 살펴보도록 하겠습니다. 먼저 차트개체에 대해 살펴보는 것이 순서일 듯합니다. 차트개체는 두가지가 있습니다. 하나는 워크시트에 삽입된 개체, 또 하나는 독립된 차트시트로 만들어진 차트개체입니다. 워크시트에 삽입된 차트는 다음과 같은 순서의 개체모델을 가집니다.
     Application.Workbook.Worksheet.ChartObject.Chart...

차트시트 안의 차트는 다음과 같은 순서의 개체모델을 가집니다.
     Application.Workbook.ChartObject.Chart...

차트개체에 대한 자세한 사항은 도움말이나 관련 서적을 참조하시고, 여기에서는 워크시트에 내장된 모든 차트를 이미지파일로 저장하는 기능을 만들 것입니다. 그리고 Export메소드만을 사용합니다.

User_Procedures.Bas
Sub ExportChartAsImage()
     Dim oChart      As ChartObject
차트를 대신할 차트개체변수입니다.
     Dim strChartName As String
기본으로 주어질 파일이름으로 차트의 제목을 담을 스트링변수
     Dim SaveFileName
저장하기 대화상자에서 사용자가 입력하는 차트이미지 이름
     Dim strFilter As String
여러 이미지파일포맷을 넣어두기 위한 변수

     strFilter = "GIF Files (*.gif), *.gif,JPEG Files (*.jpg), *.jpg,PNG Files (*.png), *.png,TIFF Files (*.tif), *.tif"
차트를 저장하기 전에 대화상자를 띄워 어떠한 형식의 이미지파일을 사용할 것인지를 선택하도록 할 것입니다. 이를 필터라고 하는데, Export메소드가 지원하는 4가지 이미지형식을 지정합니다.

다음은 필터에 대한 엑셀도움말을 옮겨본 것입니다.
이 문자열은 파일 필터 문자열의 쌍으로 이루어지고 뒤에는 MS-DOS 와일드카드 문자 파일 필터 형식이 나타나며, 각 부분과 쌍은 쉼표로 구분됩니다. 각 쌍은 파일 형식 드롭다운 목록 상자에 나열됩니다. 예를 들면 "텍스트 파일(*.txt),*.txt,추가 기능(*.xla),*.xla"는 두 개의 파일, 즉 텍스트 파일과 추가 기능 파일에 대한 필터를 지정합니다.
하나의 파일 필터 종류에 여러 개의 MS-DOS 와일드카드 문자 식을 사용하려면 "Visual Basic Files(*.bas; *.txt),*.bas;*.txt"와 같이 와일드카드 문자 사이를 세미콜론으로 구분합니다. 인수를 생략하면 기본값은 "모든 파일(*.*),*.*"입니다

     For Each oChart In ActiveSheet.ChartObjects
현재 시트에서 있는 차트를 반복합니다
          If oChart.Chart.HasTitle Then
               strChartName = oChart.Chart.ChartTitle
          End If
만일 차트이름이 있다면 이것을 strChartName에 넣어 두고 대화상자의 기본파일이름으로 사용합니다.
     SaveFileName = Application.GetSaveAsFilename ( _
InitialFileName:=strChartName, _
위의 대화상자에서 처음에 표시하는 파일이름
FileFilter:=strFilter, _
파일형식 필터
FilterIndex:=1, _
1번 필터를 디폴트값으로 설정(즉 GIF포맷)
Title:="Chart Save As" )
대화상자의 이름

          If SaveFileName <> False Then
사용자가 취소를 하지 않은 경우 저장을 합니다.

               oChart.Chart.Export _
Export메소드를 사용합니다.

FileName:=SaveFileName, _
저장할 이미지 파일이름입니다.

FilterName:=Right(SaveFileName, 3)
파일이름 뒤에는 확장자 3글자가 붙는데 이걸 따서 저장할 파일형식으로 지정합니다.
          End If
     Next
End Sub

드디어 끝입니다. 연재 초반에 설치프로그램을 만들어 볼까 했는데, 사실 이것은 xlStart폴더에 복사해두는 것이 전부라 설치프로그램이 필요없습니다. 보통 애플리케이션의 경우 설치프로그램은 압축된 원본을 풀고, 이를 사용자가 지정한 조건에 따라 디스크에 복사합니다. 그리고 레지스트리에 프로그램에 대한 내용을 기록하고 윈도우의 시작메뉴와 바탕화면에 단축아이콘을 만듭니다. 설치프로그램은 개발툴 자체에서 지원하는 걸 사용하거나(비주얼베이직) InstallShield와 같은 전문 유틸리티를 사용하여 만들 수 있습니다.

휴~ 이제 끝났습니다. 그간 부실한 저의 연재를 너그럽게 보아주신 여러분꼐 감사드립니다. 그럼 안녕히 계세요~ ^^
 

목차 | 이전