강의소개

이번 강의에서는 엑셀 선택영역 또는 선택한 시트를 이미지로 저장하기 위한 'VBA 이미지 저장 매크로'를 작성합니다. 선택영역 또는 시트에서 사용된 영역을 자동으로 인지하여 그림파일로 저장할수도 있습니다.

패치노트

Q. 선택영역이 아닌 시트 전체를 그림파일로 저장하고 싶어요

Rng_To_Image 함수를 아래와 같이 입력하면 해당 워크시트의 사용된 범위를 자동으로 인지하여 시트에서 사용된 범위 전체를 그림으로 출력합니다.

Q.  저장경로를 통합문서와 같은 경로로 설정하고 싶어요.

4-b 오류처리 부분에서, 저장경로를 아래와 같이 변경합니다.

예제파일 및 E-Book 교재 다운로드

파일구분마지막수정일파일형식파일다운로드
9완성파일2020-01-06XLSM퀵 VBA 파일다운로드
8추가기능2019-12-16XLAM퀵 VBA 파일다운로드
8완성파일2019-12-16ZIP퀵 VBA 파일다운로드
7E-Book2019-11-24PDF퀵 VBA 파일다운로드
7예제파일2019-11-22XLSX퀵 VBA 파일다운로드
6E-Book2019-11-26PDF퀵 VBA 파일다운로드
6예제파일2019-10-26XLSX퀵 VBA 파일다운로드
5E-Book2019-12-15PDF퀵 VBA 파일다운로드
5예제파일2019-12-15XLSX퀵 VBA 파일다운로드
4E-Book2019-10-30PDF퀵 VBA 파일다운로드
4완성파일2019-10-30ZIP퀵 VBA 파일다운로드
3E-Book2019-10-30PDF퀵 VBA 파일다운로드
3예제파일2019-10-30XLSX퀵 VBA 파일다운로드
2완성파일2019-12-22XLSM퀵 VBA 파일다운로드
1완성파일2019-11-27XLSM퀵 VBA 파일다운로드
영상강의

관련 기초함수
지정한 경로에 파일존재여부를 확인합니다.
컴퓨터의 바탕화면 경로를 출력합니다.

1. 예제파일 이해하기 (직원 급여명세서 기본양식)

예제파일은 3개의 시트를 포함합니다.

  • 세율표 : [2019년 기준] 소득세 및 4대보험의 요율이 작성된 시트입니다.
  • 급여자료 : 세율표를 기준으로 각 직원별 월소득에 따른 공제액과 실수령액을 계산합니다.
  • 급여명세서 : 월과 사원번호를 선택하여 직원의 급여명세서를 출력합니다. 자료는 급여자료시트를 기준으로 출력합니다.

급여자료 및 급여명세서에는 INDEX/MATCH 함수가 사용되었습니다. 함수에 대한 자세한 설명은 관련포스트를 참고하세요.

INDEX MATCH 함수 다중조건

[급여명세서] 시트의 각 직원별 지급액/공제액은 INDEX/MATCH 다중조건 함수를 사용하여 참조합니다.

2. 강의에 사용된 전체 명령문

3. 강의에 사용된 VBA 사용자 지정함수

본 강의에서는 총 4개의 추가 사용자지정함수를 사용하였습니다.

  • FileExists 함수 : 파일경로의 기존 파일존재여부를 확인합니다.
  • GetDesktopPath 함수 : 컴퓨터의 바탕화면 경로를 출력합니다.
  • FileSequence 함수 : 파일이름이 중복되지 않도록 순번을 매깁니다.
  • ValidFileName 함수 : 지정한 파일이름의 사용가능여부를 확인합니다.
FileExists 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 지정한 파일경로의 파일존재여부를 확인합니다. 
구문 : = FileExists ( 파일경로 )

GetDesktopPath 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 사용자 컴퓨터의 바탕화면경로를 출력합니다. 
구문 : = GetDesktopPath ( [백슬래쉬표시] )

FileSequence 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 파일이름이 중복되지 않도록 파일이름에 순번을 매깁니다.
구문 : = FileSequence ( 파일경로, [시작번호] )

ValidFileName 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 지정한 파일이름의 사용가능 여부를 확인합니다.
구문 : = ValidFileName ( 파일경로 )

4. 매크로 동작원리 이해하기

선택한 범위를 이미지로 저장하는 매크로는 총 9단계로 작성합니다.
엑셀은 이미지를 바로 출력/저장하는 기능을 지원하지 않습니다. 따라서 이미지를 빈 차트안에 붙여넣기 한 뒤, 차트를 그림형태로 출력하는 방법을 사용합니다. (매크로의 동작원리는 영상강의에서 자세히 설명드렸습니다.)

  1. 선택된 범위를 그림형태로 복사
  2. 임시 워크시트 추가
  3. 추가된 임시시트에 이미지 붙여넣기
  4. 이미지의 높이와 넓이 확인후 이미지 제거
  5. 추가된 임시시트에 빈 차트 생성
  6. 차트의 높이와 넓이를 이미지와 동일하게 변경
  7. 차트안에 이미지 붙여넣기
  8. 차트를 원하는 파일경로에 이미지형태로 출력
  9. 임시 워크시트 삭제
VBA 명령문 작성하기

범위를 이미지로 저장하는 매크로 명령문을 작성합니다. 명령문 각 단계별로 알아보겠습니다.

우선 Rng_To_Image 라는 명령문을 아래와 같이 인수를 포함하여 작성합니다.

명령문에 추가된 인수들은 아래와 같습니다.

  • rngSelection : 사용자가 선택한 범위입니다.
  • FileName : 이미지로 저장될 파일명입니다. (기본값: 엑셀이미지)
  • SavePath : 이미지를 저장할 파일경로입니다. (기본값: 빈칸)
  • AddSequence : 이미지를 덮어쓰기 할지 또는 순번에 따라 저장할지 결정합니다.
4-A. 변수생성

아래와 같이 변수를 생성합니다.

  • NewWs : 임시로 추가할 워크시트입니다.
  • PicRange : 선택한 범위를 그림형태로 붙여넣기 한 이미지 개체입니다.
  • MyObj : 이미지를 붙여넣기 할 차트 개체입니다.
  • PicH, PicW : 이미지의 높이와 넓이입니다.
  • FilePath : 이미지가 저장될 파일명을 포함한 전체 파일경로입니다.
4-B. 파일이름 점검 및 저장할 파일경로 생성

윈도우에는 파일이름으로 사용불가한 특수기호가 있습니다. 사용자가 지정한 파일이름이 윈도우에서 사용가능한지 파일이름을 점검합니다.

파일이름에 이상이 없을 시, 전체 파일경로를 생성합니다. 명령문의 보조 인수 중 SavePath 가 빈칸일 경우, GetDesktopPath 함수를 통해 바탕화면에 파일이 저장되도록 만들어줍니다.

AddSequence 인수가 True일경우, 파일 이름을 순번에 따라 저장합니다. 이전 단계에서 붙여넣기 한 FileSequence 함수를 통해 파일이름에 순번을 매겨줍니다.

4-C. 선택한 범위를 그림형태로 복사

선택된 범위를 그림형태로 복사합니다. 본 예제에서는 사용자가 선택한 범위를 rngSelection으로 받아왔지만, 별도의 범위를 임의로 설정할 수도 있습니다.

4-D. 임시시트 생성 및 그림 붙여넣기

그림을 붙여넣기 할 임시시트를 생성한 뒤, 시트에 이미지를 붙여넣기 합니다.

4-E. 이미지의 높이와 넓이 확인 후 이미지 제거

붙여넣기 한 이미지의 높이와 넓이를 확인한 뒤, 이미지를 삭제합니다.

4-F. 빈 차트 생성 및 높이와 넓이 조정

임시 시트에 빈 차트를 생성한 뒤, 차트의 높이와 넓이를 이미지와 동일하게 조정합니다.

4-G. 빈 차트안에 그림 붙여넣기

차트 안에 그림을 붙여넣기 합니다. 차트안에 그림을 붙여넣기 할 때에는 반드시 Select를 통해 차트가 선택이 된 상태에서 Paste로 붙여넣기 해야만 매크로가 동작한다는 점을 주의하세요.

4-H. 차트를 이미지로 저장

차트를 이미지로 저장합니다. 이전 단계에서 만들어준 파일 경로에 PNG 형태의 이미지로 저장합니다.

4-I. 임시시트 삭제

매크로 실행을 위해 추가했던 임시 워크시트를 삭제합니다.

엑셀은 기본적으로 시트를 삭제할 시 안내메세지를 출력합니다. 안내메세지 출력을 방지하기 위해 시트 삭제 전 DisplayAlerts 속성을 False로 변경합니다.

5. 이미지 저장 매크로 테스트

작성한 명령문이 잘 동작하는지 테스트합니다. 아래와 같이 Test 명령문을 작성한 뒤 실행합니다.

매크로를 실행하면 아래와 같이 바탕화면에 선택된 범위가 이미지로 저장되는 것을 확인할 수 있습니다.

범위를 이미지로 저장 매크로 완성 GIF

시트에 도형을 추가한 뒤, Test 매크로를 지정하여 매크로가 잘 동작하는지 테스트합니다.

4
댓글 남기기

avatar
2 Comment Thereads
2 Thread replies
0 팔로워
 
가장 좋아요가 많은 댓글
가장 인기많은 댓글
3 작성자
오빠두엑셀신태환hjkang 최근 작성자
  현재 페이지 댓글알림 신청  
알림 설정
신태환
손님
신태환

안녕하세요. 강의 잘 보고 있습니다 정말 감사드려요!
다른게 아니고 혹시 저장을 바탕화면말고 특정 폴더에 할수있는 방법이 있을까요?

오빠두엑셀
손님

안녕하세요? 오빠두엑셀입니다.
GetDesktopPath 함수 대신 값을 특정 폴더로 변경해보시겠어요?^-^
예를 들어 SavePath = "C:/" 등으로 설정하시면 됩니다.

hjkang
손님
hjkang

안녕하세요. 강의가 정말 유용합니다!! 대단하셔요.
강사님, 혹시 위와 같은 방법으로
엑셀파일을 워드 파일로 변경하는 매크로도 가능할까요??

오빠두엑셀
손님

네 물론 가능합니다.^-^ Word 라이브러리를 사용하시면 됩니다.
방법은 이후 강의인 아웃룩에서 진행한 방법과 동일하게 진행하시면 됩니다.
개체만 Outlook에서 Word로 변경한 뒤 코드를 작성해보시겠어요?:)