매크로 기록으로 엑셀 VBA의 내부를 보다
엑셀 VBA는 엑셀을 위한 Visual Basic이므로, 기본적으로는 Visual Basic으로 되어 있어 문법이 쉬운 편이지만, 엑셀에 특화되어 있기 때문에 엑셀의 특성을 잘 알아야 합니다.
엑셀은 셀을 기반으로 계산을 하고, 복사하고 붙여넣기, 차트 만들기 등 다양한 작업을 합니다.
복사하고 붙여 넣기를 매크로 기록으로 알아보고 매크로를 개선하는 방법을 알아보겠습니다.
1. 매크로 기록
A1셀의 값을 B1셀에 붙여 넣어 보겠습니다.
개발도구 - 매크로 기록을 누릅니다.
그러면 아래와 같이 매크로 이름 매크로1, 매크로 저장 위치가 현재 통합 문서로 지정되어 있는데, 바로 확인 버튼을 눌러도 되고, 바로 가기 키를 지정하거나 매크로 저장 위치를 개인용 매크로 통합 문서로 변경하거나 설명에 내용을 추가할 수 있습니다.
홈 탭에서 복사 명령을 누르거나 Ctrl + C 단축키를 눌러 A1셀을 복사합니다.
Ctrl + C키를 눌렀더니 A1셀에 점선으로 테두리가 쳐집니다.
B1셀을 클릭한 다음 Ctrl + V키를 누르거나 홈 탭의 붙여넣기 명령을 누르면 아래와 같이 B1셀에 A1셀 값이 붙여 넣어집니다.
이제 매크로 기록을 종료하기 위해 기록 중지 명령을 누릅니다.
2. 매크로 내용 보기
개발 도구 탭에서 Visual Basic 명령을 누릅니다.
통합 문서 1 아래의 모듈 왼쪽에 있는 + 표시를 누릅니다.
그러면 모듈 아래에 Module 1이 펼쳐집니다. Module 1을 더블 클릭하면
오른쪽 코드 창에 그동안 기록된 매크로 내용이 보입니다.
내용은 아래와 같습니다.
Option Explicit
Sub 매크로1()
'
' 매크로1 매크로
'
'
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
Option Explicit가 맨 위에 있고,
Sub 매크로1()로 시작해서 End Sub로 끝나는데,
그 안을 보면 복사해서 붙여 넣기이니까 Copy와 Paste가 보이는데,
이외에도 Selection, Range("B1"), ActiveSheet, Application, CutCopyMode, False 등 낯선 용어가 보입니다.
3. 복사해서 붙여넣기 매크로의 의미
① Option Explicit는 '변수 선언을 명확히 하라'는 의미로
도구 - 옵션 메뉴를 누른 다음
변수 선언 요구의 왼쪽에 체크하면 매크로를 작성할 때마다 맨 위에 자동으로 추가됩니다.
② Selection.Copy에서 Selection은 선택된 범위라는 의미입니다. 현재는 A1셀이 선택되어 있기 때문에 A1셀을 의미합니다.
Copy는.(점) 뒤에 붙어 있는데 Selection이 복사의 대상이 되는 것이고, 따라서 이것을 복사하라는 의미가 됩니다.
③ Range("B1").Select
Range는 범위라는 의미로서 범위를 지정할 때 사용합니다. 사용 형식은 Range 안에 셀 주소 또는 범위를 입력하면 됩니다.
다시 말해 Range("B1")도 되고, 합계 수식을 입력할 때처럼 "B1:C1"을 Range안에 넣어서 Range("B1:C1")로 입력해도 됩니다.
Select는 선택하다는 뜻이므로, Range("B1").Select는 B1셀을 선택하라는 의미, 다시 말해 마우스로 클릭하거나 키보드를 눌러서 B1셀로 이동한 것과 같은 효과가 발생합니다.
④ ActiveSheet.Paste
ActiveSheet는 Active와 Sheet가 붙어 있으므로 활성화된 시트, 현재 시트를 의미합니다. B1셀에 붙여 넣으므로 Range("B1").Paste일 것 같은데, 아니니 주의해야 합니다.
ActiveSheet를 Range("B1")로 수정하고, 표준 도구 모음에서 세모 모양 실행(계속, F5) 아이콘을 누르면
아래와 같이 '개체가 이 속성 또는 메서드를 지원하지 않습니다'란 에러 메시지 창이 표시됩니다.
이 상태에서 디버그 버튼을 누르면
아래와 같이 Range("B1").Paste 부분이 노란색 음영으로 표시됩니다.
Ctrl + Z키를 누르거나, 표준 도구 모음에서 실행 취소 아이콘을 눌러 ActiveSheet로 돌립니다.
그리고, 실행을 중단시키기 위해 네모 모양의 재설정(중지) 아이콘을 누릅니다.
⑤ Application.CutCopyMode = False
Application은 엑셀, 워드 등 응용프로그램을 말합니다. 복사하기를 하면 엑셀뿐만 아니라 다른 응용프로그램에도 붙여 넣을 수 있기 때문에 ActiveSheet가 아니라 Application을 대상으로 지정하는 것입니다.
CutCopyMode는 잘라내기, 복사하기 모드를 의미합니다.
복사하면 셀 주변에 점선으로 테두리가 있었는데, CutCopyMode를 False로 지정하면 점선이 사라집니다.
명령이 실행되지 않도록 Application.CutCopyMode = False 맨 앞에 '(작은따옴표)를 넣거나, 편집 도구 모음에서 주석 블록 설정 버튼을 누르면
'(작은따옴표)를 맨 앞에 추가되고, 녹색으로 표시됩니다.
이것은 이 실행문이 주석이다라는 의미가 되며, 실행에서 제외됩니다.
다시 세모 모양 아이콘을 눌러 매크로를 실행한 다음 표준 도구 모음에서 엑셀 모양의 엑셀 보기 아이콘을 누른 다음
A1셀의 점선이 그대로 있습니다.
4. 복사해서 붙여넣기 매크로 간단하게 만들기
가. 엑셀 VBA 도움말 1
Visual Basic Editor의 도움말 메뉴 아래 Miscrosoft Visual Baisc for Applications 도움말을 클릭해서
Microsoft 도움말 사이트에 접속한 후 Search란에 vba paste라고 입력한 다음 엔터키를 누르면
아래와 같이 vba paste에 대한 도움말 목록이 표시되는데, 그중에서 Worksheet.Paste method(Excel)을 클릭합니다.
그러면 Worksheet.Paste method에 대한 도움말이 표시되는데 구문(Syntex), 인수(Parameters), 주석(Remarks), 예제(Examples)가 표시됩니다.
매크로로 기록한 것은 3줄이었는데, 2줄로 되어 있고,
Range앞에 Worksheets("Sheet1"). 이 추가되어 범위가 Sheet1 시트에 있다는 것을 명시하고 있습니다.
또한 Paste의 경우에도 Application이 아니라 ActiveSheet로 응용프로그램에서 엑셀 시트로 범위를 좁혔습니다.
그리고, 붙여 넣을 범위를 Destination이라는 인수명을 사용해서 := 다음에 Worksheets("Sheet1").Range("D1:D5")를 입력했습니다.
나. 엑셀 VBA 도움말 2
이번에는 검색어를 vba paste destination으로 수정한 다음 검색하면 목록에 Range.Copy method(Excel)에 대한 도움말이 있으므로 클릭하면
그러면 위와 같이 Worksheet.Paste method에 대한 도움말이 표시되는데 구문(Syntex), 인수(Parameters), 반환 값(Return value), 예제(Examples)가 표시됩니다.
예제를 보면 Copy와 destination이 한 줄로 되어 있습니다.
따라서, 매크로로 기록한 구문을
Range("A1").Copy destination:=Range("B1")로 간단히 할 수 있습니다.
직접 실행 창에
Range("A1").Copy destination:=Range("C1")이라고 입력하고 엔터키를 누른 다음
엑셀로 돌아가면
C1셀에 A1셀 값이 붙여 넣어진 것을 확인할 수 있습니다.