이번 글에서는 매크로 기록과VB 편집기 (값복사 매크로 첨부)에서 매크로 기록으로 만들어 본 시트 값복사/전체 시트 값복사 매크로의 VB 코드를 풀어서 설명해 드리겠습니다.
*매크로 불러오는 방법은 이전 글을 참고해주세요
현재시트 값복사 매크로
<코딩 구문 설명 요약>
Sub 현재시트값복사() ' 매크로 코딩 시작: Sub 매크로이름()
Cells.Select ' 시트 내 모든 셀 선택
Selection.Copy ' 선택한 범위/대상 복사 (Ctrl + C)
Selection.PasteSpecial Paste:=xlPasteValues(, Operation:=xlNone, SkipBlanks:=False, Transpose:=False)
' 선택하여 붙여넣기 (Ctrl + Alt + V) : "Paste:"는 붙여넣기 옵션, "Operation:"은 연산 옵션, "SkipBlanks:"는 내용 있는 셀만 붙여넣기 옵션, "Transpose:"는 행/열 바꿈 옵션을 의미함. 괄호 부분은 기본 선택값으로, 생략가능.
Range("A1").Select ' A1셀 선택 (생략 가능)
End Sub ' 매크로 종료
1) 범위/대상.Select 문
'범위/대상.Select'은 말 그대로 범위 혹은 대상을 선택하라는 구문입니다. 위의 코딩에서 'Cells', Range("A1")은 각각 시트 내 전체 셀, A1셀으로 모두 범위입니다.
2) Selection
▲'Selection'은 선택되어 있는 범위 혹은 대상입니다. 아무 것도 선택되어 있지 않은 상태, 즉 Select 문이 나오기 전에는 사용하면 위의 사진처럼 오류가 발생하여 매크로가 작동하지 않습니다. 현재시트값복사 매크로 코딩에서 Selection은 현재 시트 내 모든 셀들을 의미합니다. 만약에 Range("A1").Select 이후에 Selection이 있다면, 그 때는 A1셀을 의미합니다.
3) 범위/대상.Copy 문
범위/대상을 복사하라는 구문입니다. Selection.Copy는 선택되어 있는 범위/대상을 복사합니다. 위의 경우에는 Selection이 현재 시트 내 모든 셀을 의미합니다.
4) 범위/대상.PasteSpecial Paste:=xlPasteValues
▲'범위/대상.PasteSpecial'은 '범위/대상에 선택하여 붙여넣기(Ctrl+Alt+V)'를 뜻합니다. '.PasteSpecial' 뒤에 원하는 옵션을 각각 코딩할 수 있는데요. '값 복사(xlPasteValues)'의 경우 '붙여넣기(Paste:)' 옵션 중 하나이며, Paste:=xlPasteValues는 '붙여넣기 옵션=값 복사' 를 의미하는 것입니다.
나머지 부분 'Operation:=xlNone, SkipBlanks:=False, Transpose:=False'도 위의 사진을 보면 그 의미를 이해할 수 있을 것입니다. 그런데 'Operation:=xlNone, SkipBlanks:=False, Transpose:=False' 부분은 생략해도 무방합니다. 코딩이 생략되어 있으면 기본 선택 옵션으로 인식하기 때문입니다.
따라서 만약에 '범위.PasteSpecial Transpose:=True'로 코딩을 한다면, 행/열은 바꾸면서 수식과 서식 등 모든 것('모두'가 붙여넣기의 기본 옵션)을 복사하여 붙여넣게 될 것입니다.
모든 시트 값복사 매크로
Sub 전체시트값복사()
Dim i As Integer ' Dim 변수 as 변수종류 : 변수 선언하기
For i = 1 To ThisWorkbook.Worksheets.Count ' i가 1에서 ThisWorkbook.Worksheets.Count(=시트 갯수)까지
Worksheets(i).Activate ' 엑셀 파일 내 i번째 시트
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
' 노란색 음영친 부분 실행 (For 과 Next 사이의 구문 실행)
Next i
' 노란색 음영친 부분 실행 후 i가 ThisWorkbook.WorkSheets.Count이 될 때까지 다음 i로 넘어가서 다시 실행
End Sub
1) Dim 변수 as 변수종류
Dim은 변수와 변수종류를 선언할 때 사용합니다. 변수 종류에 대해서는 다른 글에서 더 깊이 알아보도록 하겠습니다만, 위의 코딩에서 Integer은 정수(대략 -21억~21억 사이)를 의미합니다. 위의 코딩에서는 Dim i as Integer라고 코딩했으나, 변수는 각자 기호에 맞게 사용할 수 있습니다. 예를 들면, 전체시트값복사 매크로에서는 변수가 시트번호를 의미하기 때문에 바로 알아볼 수 있게 'Dim 시트번호 as Integer'라고 변수 선언을 하는 것도 좋은 방법입니다.
2) ThisWorkbook.Worksheets.Count
'ThisWorkbook.Worksheets.Count'는 '현재 파일의(ThisWorkbook.) 시트들의(WorkSheets.) 갯수(Count)'를 의미합니다. '상위개체A.하위개체B.Count' 구문은 A개체 내 B의 갯수를 반환합니다.
▲예를 들면, 'MsgBox Range("a1:a4").Cells.Count' 구문은 'A1셀~A4셀' 범위의 셀 갯수인 '4'를 알림창을 띄웁니다.
3) For 변수= 시작값 To 끝값 ~~구문~~ Next 문
변수가 '시작값'부터 '끝값'이 될 때 까지 'For 변수= 시작값 To 끝값' 과 'Next' 사이의 모든 구문을 반복실행하는 것입니다.
'For i = 1 To ThisWorkbook.Worksheets.Count'는 변수의 범위를 설정하는 구문입니다. 즉, i라는 변수는 1부터 시작해서 'ThisWorkbook.Worksheets.Count(시트 갯수)'에 끝나도록 설정하는 구문입니다. 만약에 'for i = 2 to 6'으로 코딩했으면, i는 2부터 시작하여 6에서 끝날 것입니다.
Next i 는 i가 다음 값으로 넘어가도록 명령하는 구문입니다. 즉 i=1일 때 'For i = 1 To ThisWorkbook.Worksheets.Count'과 'Next i' 사이의 구문을 실행한 후, Next i를 통해 i=2가 되어 구문을 반복합니다.
i는 계속 증가하다가, 'i =ThisWorkbook.Worksheets.Count'가 되면 마지막으로 구문을 실행하고 'Next i' 이후 코드로 넘어갑니다(위의 코딩의 경우 Application.CutCutMode=False).
4) WorkSheets(숫자 혹은 "시트이름").Activate
WorkSheets(숫자 혹은 "시트이름")은 n번째 시트 혹은 해당 시트이름을 가진 시트를 의미합니다. 개체.Activate는 해당 개체를 활성화시키는 구문입니다. 즉, WorkSheets(i).Activate는 i번째 시트를 활성화시키는 구문입니다.
'For i = 1 To ThisWorkbook.Worksheets.Count ~ Next i'문으로 인해 1번째(i=1) 시트부터
마지막(i =ThisWorkbook.Worksheets.Count) 시트까지
현재 활성화된 시트 내 전체셀을 복사 후 값만 붙여넣는 것입니다(기존 현재시트값복사와 구문 동일).
주요 개념 복습
1) Integer : 정수 변수
2) For ~ Next 구문: 대표적인 반복문
3) PasteSpecial Paste:=xlPasteValues : 복사한 범위의 값만 복사하기
관련 글
[엑셀 VBA/매크로] 매크로 기록과 VB 편집기 (값복사 매크로 첨부)
[엑셀 기능] 엑셀 주요기능 세 가지: 스프레드시트, 매크로/VBA, 파워쿼리
'엑셀, VBA, 파워쿼리 > VBA 매크로' 카테고리의 다른 글
[엑셀 VBA 매크로] For 구문으로 엑셀 시트 이름 한번에 바꾸기 #1: Range(셀 주소) 버전 (1) | 2023.10.10 |
---|---|
[VBA 매크로] 원하는 이름으로 엑셀시트 생성하기 [Cells(행,열) 버전] (1) | 2023.10.10 |
[엑셀 VBA 코딩] 엑셀 매크로로 시트 생성하기 (0) | 2023.10.10 |
[VBA 매크로] 매크로 기록과 VB 편집기 (값복사 매크로 첨부) (0) | 2023.10.05 |
[VBA 매크로] 매크로를 시작하기 전 엑셀 설정하기 (0) | 2022.12.05 |
댓글