[VBA 매크로] 현재시트만 따로 저장하기
엑셀, VBA, 파워쿼리/VBA 매크로

[VBA 매크로] 현재시트만 따로 저장하기

by Jongg 2023. 10. 10.
728x90

이번 글에서는 현재시트만 따로 저장하는 매크로를 소개해 드리겠습니다.

 

현재시트 저장하기.xlsm
0.02MB

 

 

예시파일 생황 

 

▲예시 파일 '현재시트 저장하기'에는 'Test1'과 'Test2' 시트가 있습니다. 이번 글에서는 매크로를 통해 현재 활성화된 시트를 따로 저장해볼 것입니다. 

 

VBA 매크로 구문 해석

1) 매크로 코드 전문

Sub 현재시트별도저장()

Dim wbkname As String

wbkname = Left(ThisWorkbook.FullName, Len(ThisWorkbook.FullName) - 5) ◀ 따로 저장할 파일 이름 설정 

ActiveSheet.Copy  ◀ 현재 활성화된 시트를 새 통합문서에 복사

ActiveWorkbook.SaveAs Filename:=wbkname & "_" & ActiveSheet.Name & ".xlsx"
◀ 새 통합문서를 설정한 이름으로 저장하기
ActiveWorkbook.Close ◀ 새롭게 만든 파일 닫기

End Sub

2) 구문 해석

 

① wbkname = Left(ThisWorkbook.FullName, Len(ThisWorkbook.Name) - 5) 

wbkname이라는 문자열(String) 변수를 파일 경로가 포함된 현재 파일 이름으로 설정해주는 구문입니다.

즉, 예시 파일을 기준으로 하면 wbkname은 '파일위치\현재시트 저장하기'가 됩니다.

▲Left(ThisWorkbook.FullName, Len(ThisWorkbook.FullName) - 5)와 같이 구문이 복잡해진 이유는 현재 파일의 이름을 뜻하는 구문 ThisWorkbook.FullName이 위의 사진처럼 파일 확장자까지 포함하기 때문입니다.

 

그래서 확장자 부분 '.xlsm'을 제거하기 위해 Left 함수와 Len 함수(엑셀 함수와 사용법 동일)를 사용한 것입니다. 

Len(ThisWorkbook.Name)으로 ThisWorkbook.FullName의 총 길이를 구합니다. '파일위치\현재시트 저장하기.xlsm'의 총 글자 수는 70임을 알 수 있습니다.

 

▲확장자 부분 '.xlsm'의 길이가 5이므로('.xlsx' 도 마찬가지임),

Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5) 의 결과는  '파일위치\현재시트 저장하기' 입니다. 

 

 

②  ActiveSheet.Copy

▲현재 활성화된 시트를 새 통합 문서(새로운 파일)에 복사하는 구문입니다. 이 때, 시트이름도 유지됩니다. 위의 사진처럼 현재 활성화 된 시트(Test2)가 '통합 문서n'이라는 새로운 파일로 열립니다. 

 

ActiveWorkbook.SaveAs Filename:=wbkname & "_" & ActiveSheet.Name & ".xlsx"

ActiveWorkbook현재 활성화된 파일을 뜻하며, 위의 구문에서는 맨 처음에 열었던 '현재시트 저장하기.xlsm'이 아니라, 새로 열린 '통합 문서' 파일을 의미합니다.      

 

ActiveWorkbook.SaveAs Filename:= ~ 현재 활성화 된 파일(ActiveWorkbook)

파일 이름을 ~로 설정 (Filename:= ~)하여 저장(.SaveAs)하라는 구문입니다. 

▲wbkname은 이전에 '파일위치\현재시트 저장하기'로 설정한 상태이며,

ActiveSheet.Name은 현재 활성화된 시트명입니다. 위의 구문의 경우 현재 활성화 된 시트의 이름은 'Test2'입니다. 

 

▲'&'는 엑셀과 마찬가지로 문자열들을 이어주는 역할을 합니다. 즉, wbkname & "_" & ActiveSheet.Name & ".xlsx"는 위의 사진처럼 문자열 '현재시트 저장하기',  '_', 'Test2', '.xlsx'를 이어주는 구문입니다.

 

ActiveWorkbook.Close

현재 활성화된 파일을 닫는 코드입니다. 즉, '현재시트 저장하기_Test2.xlsx'라는 이름으로 시트가 따로 저장된 파일을 닫는 구문입니다. 

 

 

728x90

 

실행 결과

▲위의 사진처럼 '현재시트 저장하기' 파일이 있는 폴더에 별도의 시트가 복사된 파일이 저장됩니다. 

이번 구문을 응용한다면, 모든 시트를 별도로 저장하는 매크로나 값복사해서 저장하는 매크로로 발전시킬 수 있습니다. 


 

관련 글

[엑셀 팁] '새 창' 기능으로 하나의 엑셀파일을 여러 개 창으로 보기

[엑셀 VBA 코딩] 시트 값복사/모든 시트 값복사 매크로 VB 코드 해석: For 구문 등

[엑셀 VBA/매크로] 매크로 기록과 VB 편집기 (값복사 매크로 첨부)

[엑셀 기능] 엑셀 주요기능 세 가지: 스프레드시트, 매크로/VBA, 파워쿼리

[엑셀 VBA/매크로] 시작하기 전 엑셀 설정하기 

728x90

댓글