- 최초 작성일: 2003-01-08
- 최종 수정일: 2026-09-30
- 조회수: 9 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 셀 영역을 GIF 그림 파일로 저장하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
Not on the stage alone, in the world also a man's real character comes out best in his asides. 무대 위에서만이 아니라 현실 세계에서도 그 사람의 진정한 성격은 무심코 내뱉은 한마디 말 속에 가장 잘 나타난다.
늘 말을 조심하며 살아야겠습니다. 뜻대로 잘 안되긴 하지만...
셀 영역을 GIF 그림 파일로 저장하기
핵심 요약: 셀 영역을 GIF 파일로 내보내기
차트 개체를 그림의 그릇으로 활용하면 셀 영역도 그림 파일로 저장할 수 있습니다. 핵심은 CopyPicture와 Chart.Export의 조합입니다.
- 1단계: GetSaveAsFilename으로 저장할 파일 이름을 받습니다.
- 2단계: 임시 시트에 차트를 만들고 CopyPicture로 복사한 영역을 붙여 넣습니다.
- 3단계: Chart.Export로 GIF 파일을 저장하고 임시 시트를 삭제합니다.
Step 1: 어떤 질문이었을까요?
ActiveChart.Export를 사용하면 선택한 차트를 곧바로 GIF 파일로 저장할 수 있다는 것은 알게 되었는데, 차트가 아니라 임의로 선택한 셀 영역을 GIF 파일로 만들려면 어떻게 해야 하느냐는 질문이었습니다.
Step 2: 셀 영역을 그림 파일로 저장하기
차트를 그림 파일로 만드는 방법에 대해서는 지난 VB0046 강좌에서 소개드린 바 있습니다. 이번 시간에는 차트가 아닌 워크시트 상의 특정 영역을 그림 파일로 만드는 방법에 대해 살펴보도록 하겠습니다. 적당한 크기의 영역을 선택하신 다음 아래 버튼을 누르세요.
워크시트 상의 영역이 그림 파일(GIF)로 저장이 되었지요?
Sub ExportRangeToGIF()
Dim chtChart As ChartObject
Dim strFile As String
Dim strType As String
Dim strDupe As String
Dim strTemp As String
Dim rngTarget As Range
Application.ScreenUpdating = False
Set rngTarget = Selection
' 현재 선택된 영역을 rngTarget 이라는 변수에 담아 둡니다.
strFile = Application.GetSaveAsFilename(InitialFileName:="나의차트", _
FileFilter:="GIF Files(*.gif),*.gif", _
Title:="그림의 이름을 지정하세요//Exceller")
' 사용자로부터 저장할 그림 파일의 이름을 입력받습니다.
' 대화상자를 종료하였거나 이미 같은 이름의 파일이 존재할 경우에 대한 처리를 지정합니다.
If strFile = "False" Then GoTo ET
If Dir(strFile) <> "" Then
strDupe = "같은 이름의 파일이 이미 존재합니다." & vbCr
strDupe = strDupe & "덮어쓸까요?"
If MsgBox(strDupe, vbYesNo, "중복 확인//www.iExceller.com") = vbNo Then GoTo ET
End If
Worksheets.Add
strTemp = ActiveSheet.Name
Charts.Add
ActiveChart.Location where:=xlLocationAsObject, Name:=strTemp
Set chtChart = Worksheets(strTemp).ChartObjects(1)
' 워크시트를 삽입한 다음 차트 오브젝트를 하나 만듭니다.
rngTarget.CopyPicture appearance:=xlScreen, Format:=xlPicture
' rngTarget 영역을 클립보드에 복사해 둡니다.
With chtChart
.Border.LineStyle = xlLineStyleNone
.Width = rngTarget.Width
.Height = rngTarget.Height
.Chart.Paste
.Chart.Export Filename:=strFile, filtername:="GIF"
' 차트의 테두리 선과 크기 등을 지정한 다음 클립보드의 내용을 붙여 넣습니다.
' 그런 다음 Export 메서드를 이용하여 그림 파일로 내보냅니다.
End With
Application.DisplayAlerts = False
Worksheets(strTemp).Delete
Application.DisplayAlerts = True
' 차트를 내 보내고 나서 임시로 만들어 두었던 워크시트를 삭제합니다.
' ScreenUpdating 속성을 False로 지정한 상태에서 작업을 진행하므로 사용자는 이런
' 일련의 과정을 눈치챌 수 없겠지요?
MsgBox strFile & " 파일이 생성되었습니다.", vbInformation, "저장 완료//www.iExceller.com"
ET:
If Err <> 0 Then
MsgBox Err.Description, vbInformation, "오류 발생 : " & Err.Number
Err.Clear
End If
Application.ScreenUpdating = True
End Sub
먼저 CopyPicture 메서드로 선택 영역을 그림 형태로 클립보드에 복사합니다. 그리고 임시 워크시트에 차트 개체를 만들어 크기를 영역과 똑같이 맞춘 다음 그림을 붙여 넣고, Export 메서드로 GIF 파일로 내보냅니다. 작업이 끝나면 임시 워크시트는 삭제하고, ScreenUpdating을 False로 두었으므로 이 과정은 화면에 나타나지 않습니다.
본 강좌의 핵심은... 차트 오브젝트를 이용하여 Range 오브젝트의 내용을 담은 다음 내보내기(Exporting) 한다는 것입니다. 많이들 응용해 보세요.
다음 시간에 또...
정리 — 영역 그림 저장 핵심 코드
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 파일 이름 입력 | Application.GetSaveAsFilename | 저장 경로와 이름 받기 |
| 영역 복사 | rngTarget.CopyPicture | 영역을 그림으로 복사 |
| 차트 준비 | Charts.Add / ChartObjects(1) | 그림을 담을 그릇 |
| 내보내기 | .Chart.Export Filename, "GIF" | GIF 파일 저장 |
| 임시 시트 삭제 | Worksheets(strTemp).Delete | 작업 흔적 제거 |
자주 묻는 질문 (FAQ)
Q1. 셀 영역을 바로 그림 파일로 저장할 수 있나요?
Range 개체에는 Export 메서드가 없으므로, 차트 개체에 그림을 붙여 넣은 다음 차트의 Export 메서드를 사용하는 방식을 씁니다.
Q2. CopyPicture는 어떤 역할을 하나요?
선택 영역을 그림 형태로 클립보드에 복사합니다. 이 그림을 차트에 붙여 넣으면 차트 크기를 영역 크기와 맞추어 그대로 내보낼 수 있습니다.
Q3. 임시 시트는 왜 삭제하나요?
차트 개체를 만들기 위해 잠시 사용한 시트이므로 작업이 끝나면 지웁니다. 삭제 시 나타나는 경고는 DisplayAlerts를 False로 하여 숨깁니다.
마치며
차트 개체를 이용해 Range의 내용을 담은 다음 내보낸다는 발상을 익혀 두면 다양한 그림 파일 저장 작업에 응용할 수 있습니다.