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

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

by Jongg 2023. 10. 6.
728x90

이번 글에서는 매크로 기록과VB 편집기 (값복사 매크로 첨부)에서 매크로 기록으로 만들어 본 시트 값복사/전체 시트 값복사 매크로의 VB 코드를 풀어서 설명해 드리겠습니다. 

 

값복사.bas
0.00MB

*매크로 불러오는 방법은 이전 글을 참고해주세요

 

현재시트 값복사 매크로

<코딩 구문 설명 요약> 

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

선택하여 붙여넣기 화면(Ctrl+Alt+V)

▲'범위/대상.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/매크로] 시작하기 전 엑셀 설정하기

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

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

 

 

 

 

728x90

댓글