엑셀 VBA에서 PasteSpecial 메서드는 특정 요소(값, 서식, 수식 등)만 붙여넣을 때 사용됩니다.
즉, 일반 Paste와 달리 원하는 속성(값, 서식, 수식, 열 너비 등)만 선택하여 붙여넣기 가능합니다.
1. 기본 문법
Range("붙여넣을 위치").PasteSpecial Paste:=붙여넣을 유형, Operation:=연산, SkipBlanks:=True/False, Transpose:=True/False
|
- Paste (필수): 붙여넣을 유형 (xlPasteValues, xlPasteFormats 등)
- Operation (선택): 붙여넣기 시 적용할 연산 (xlPasteSpecialOperationAdd, xlPasteSpecialOperationMultiply 등)
- SkipBlanks (선택): True로 설정하면 빈 셀은 건너뜀
- Transpose (선택): True로 설정하면 행과 열을 바꿔서 붙여넣기
2. 주요 Paste 옵션
옵션
|
설명
|
xlPasteAll
|
모든 요소(값 + 서식 + 수식) 붙여넣기
|
xlPasteValues
|
값만 붙여넣기 (수식 제거)
|
xlPasteFormulas
|
수식만 붙여넣기 (서식 유지)
|
xlPasteFormats
|
서식만 붙여넣기
|
xlPasteColumnWidths
|
열 너비만 붙여넣기
|
xlPasteComments
|
메모(댓글)만 붙여넣기
|
xlPasteValidation
|
데이터 유효성 검사 규칙만 붙여넣기
|
3. 특정 요소 붙여넣기 예제
📌 값만 붙여넣기 (xlPasteValues)
Sub 값만_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
|
📌 A1:A5의 값을 B1부터 붙여넣기 (서식 및 수식 제거됨)
📌 수식만 붙여넣기 (xlPasteFormulas)
Sub 수식만_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
End Sub
|
📌 A1:A5의 수식만 B1부터 붙여넣기 (서식은 유지)
📌 서식만 붙여넣기 (xlPasteFormats)
Sub 서식만_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub
|
📌 A1:A5의 서식만 B1부터 붙여넣기 (값과 수식은 변경되지 않음)
📌 열 너비만 붙여넣기 (xlPasteColumnWidths)
Sub 열너비_붙여넣기()
Columns("A").Copy
Columns("B").PasteSpecial Paste:=xlPasteColumnWidths
Application.CutCopyMode = False
End Sub
|
📌 A열의 열 너비를 B열에 적용 (내용은 변경되지 않음)
📌 메모(댓글)만 붙여넣기 (xlPasteComments)
Sub 메모만_붙여넣기()
Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlPasteComments
Application.CutCopyMode = False
End Sub
|
📌 A1의 메모(댓글)만 B1에 붙여넣기
📌 데이터 유효성 검사 규칙만 붙여넣기 (xlPasteValidation)
Sub 유효성검사_붙여넣기()
Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlPasteValidation
Application.CutCopyMode = False
End Sub
|
📌 A1의 데이터 유효성 검사(예: 목록, 숫자 범위 등)만 B1에 붙여넣기
4. 연산 적용하여 붙여넣기
📌 기존 값에 더하기 (xlPasteSpecialOperationAdd)
Sub 더하기_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationAdd
Application.CutCopyMode = False
End Sub
|
📌 A1:A5 값을 B1:B5에 더하기 (B1:B5가 기존 값이 있는 상태에서 계산됨)
📌 기존 값에서 빼기 (xlPasteSpecialOperationSubtract)
Sub 빼기_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationSubtract
Application.CutCopyMode = False
End Sub
|
📌 A1:A5 값을 B1:B5에서 빼기
📌 기존 값에 곱하기 (xlPasteSpecialOperationMultiply)
Sub 곱하기_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationMultiply
Application.CutCopyMode = False
End Sub
|
📌 A1:A5 값을 B1:B5에 곱하기
📌 기존 값에 나누기 (xlPasteSpecialOperationDivide)
Sub 나누기_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationDivide
Application.CutCopyMode = False
End Sub
|
📌 A1:A5 값을 B1:B5에서 나누기
5. 행과 열 바꿔서 붙여넣기 (Transpose:=True)
Sub 행렬_변환_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End Sub
|
📌 A1:A5의 데이터를 B1:F1(가로 방향)으로 붙여넣기
6. 빈 셀 제외하고 붙여넣기 (SkipBlanks:=True)
Sub 빈셀제외_붙여넣기()
Range("A1:A5").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True
Application.CutCopyMode = False
End Sub
|
📌 빈 셀을 제외하고 값 붙여넣기
📝 정리
기능
|
VBA 코드
|
값만 붙여넣기
|
PasteSpecial Paste:=xlPasteValues
|
수식만 붙여넣기
|
PasteSpecial Paste:=xlPasteFormulas
|
서식만 붙여넣기
|
PasteSpecial Paste:=xlPasteFormats
|
열 너비만 붙여넣기
|
PasteSpecial Paste:=xlPasteColumnWidths
|
메모(댓글)만 붙여넣기
|
PasteSpecial Paste:=xlPasteComments
|
유효성 검사만 붙여넣기
|
PasteSpecial Paste:=xlPasteValidation
|
더하기 연산 적용
|
Operation:=xlPasteSpecialOperationAdd
|
행과 열 바꿔 붙여넣기
|
Transpose:=True
|
빈 셀 제외하고 붙여넣기
|
SkipBlanks:=True
|
🔥 VBA의 PasteSpecial을 활용하면 데이터 처리를 유연하게 자동화할 수 있습니다! 🚀