엑셀에서 복사-붙여넣기 작업을 반복하다 보면 어느새 시간이 훌쩍 지나가 있습니다. 수백 개 행을 옮기고, 서식을 맞추고, 행과 열을 바꾸는 일까지 손으로 하다 보면 퇴근 시간이 다가오기 마련이죠. 이런 반복 작업은 VBA 매크로를 이용하면 코드 10줄 안팎으로 자동화할 수 있습니다. PasteSpecial 옵션만 조절하면 값만 붙여넣기, 서식 유지, 행/열 바꿈까지 상황에 맞게 처리할 수 있고, 반복 횟수와 간격도 입력받아 한 번에 실행할 수 있습니다.
붙여넣기 자동 정리 매크로, 어디까지 가능할까
엑셀 VBA에서 복사와 붙여넣기를 자동화하는 가장 기본적인 방식은 Range.Copy 메서드와 Range.PasteSpecial 메서드를 활용하는 것입니다. 이 메서드의 인자 값을 바꾸면 붙여넣을 내용을 정확하게 지정할 수 있습니다.
- 값만 붙여넣기:
xlPasteValues - 서식까지 유지:
xlPasteAll - 열 너비만 가져오기:
xlPasteColumnWidths - 수식만 복사:
xlPasteFormulas
가장 기본적인 값만 붙여넣는 코드는 아래와 같습니다. 표 양식이 이미 만들어져 있고 데이터만 갱신해야 하는 상황에서 유용합니다.
Sub PasteValuesOnly()
Range("A1:A10").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
이 코드에서 Application.CutCopyMode = False는 매크로 실행 후 클립보드를 비워 점선 테두리가 남지 않게 하는 역할을 합니다. 이 한 줄을 빠뜨리면 복사 상태가 계속 유지되니 주의가 필요합니다. 반면 테두리나 배경색 같은 서식까지 유지하려면 xlPasteAll을 쓰면 됩니다.
같은 데이터를 여러 위치에 반복해서 붙여넣는 방법
같은 데이터 블록을 여러 위치에 일정한 간격으로 붙여넣어야 하는 경우가 있습니다. 예를 들어 3행짜리 데이터를 18행 간격으로 12번 반복해서 배치해야 하는 식이죠. 이때 For 루프와 InputBox를 조합하면 횟수와 간격을 직접 입력받아 처리할 수 있습니다.
Sub PasteRepeatedly()
Dim srcRange As Range
Dim pasteCount As Long, interval As Long, startRow As Long
Dim i As Long
Set srcRange = Application.InputBox("복사할 범위 선택", Type:=8)
pasteCount = Application.InputBox("반복 횟수 입력", Type:=1)
interval = Application.InputBox("붙여넣기 간격(행 수) 입력", Type:=1)
startRow = Application.InputBox("시작 행 번호 입력", Type:=1)
For i = 0 To pasteCount - 1
srcRange.Copy
Cells(startRow + (interval * i), 1).PasteSpecial Paste:=xlPasteValues
Next i
Application.CutCopyMode = False
End Sub
이 매크로를 실행하면 복사할 범위, 반복 횟수, 간격, 시작 위치를 차례로 입력받습니다. 월별 예측 모델을 만들 때 12개월치 데이터를 같은 간격으로 배치하거나, 여러 부서에서 취합한 데이터를 정해진 위치에 나눠 넣을 때 유용합니다.
세로 데이터를 가로로 눕혀서 붙여넣기
세로로 정리된 데이터를 가로 방향 보고서 양식에 맞춰야 할 때가 있습니다. 월별 매출이 세로로 입력된 표를 가로로 눕혀서 붙여넣어야 하는 상황이 대표적입니다. 이때 Transpose:=True 옵션을 추가하면 행과 열이 바뀐 상태로 붙여넣기가 됩니다.
Sub PasteTransposed()
Range("A1:A12").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End Sub
이 방식은 여러 시트에 걸쳐 있는 데이터를 한 시트에 가로 방향으로 취합할 때 특히 편리합니다. 세로로 길게 늘어진 원본 데이터를 그대로 유지하면서, 보고서용 시트에는 가로로 배치하는 식으로 활용할 수 있습니다.
빈 셀을 건너뛰고 값만 붙여넣는 방법
여러 부서에서 취합한 데이터를 하나의 마스터 시트로 모을 때 문제가 되는 경우가 있습니다. 원본 범위에 빈 셀이 섞여 있으면 붙여넣을 때 목적지에 있던 기존 값을 덮어써버릴 수 있기 때문입니다. SkipBlanks:=True 옵션을 사용하면 빈 셀은 건너뛰고 값이 있는 셀만 붙여넣습니다.
Sub PasteSkipBlanks()
Range("A1:A10").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True
Application.CutCopyMode = False
End Sub
이 방식은 새로 들어온 데이터 중 값이 있는 셀만 갱신하고, 빈 셀은 기존 입력값을 유지하고 싶을 때 사용합니다. 반복 입력되는 취합 문서나 일일 보고서를 관리할 때 유용합니다.
매크로 파일 공유와 보안 설정 주의사항
매크로가 포함된 파일을 다른 사람에게 공유할 때는 반드시 .xlsm 확장자로 저장해야 합니다. 일반 .xlsx 파일로 저장하면 매크로 코드가 함께 저장되지 않으니 주의가 필요합니다.
매크로를 처음 실행할 때 보안 경고가 뜨면서 실행이 차단되는 경우가 있습니다. 엑셀 옵션에서 매크로 보안을 '모든 매크로 사용'으로 변경하거나, 신뢰할 수 있는 위치에 파일을 저장해 두면 매번 허용할 필요가 없습니다. 다만 보안 설정을 낮추는 만큼, 출처가 불분명한 파일의 매크로는 실행하지 않는 것이 안전합니다.
코드 상단에 On Error Resume Next 구문을 추가하면 오류가 발생해도 프로그램이 중단되지 않고 다음 줄로 넘어갑니다. 다만 이 경우 오류가 있어도 조용히 지나가므로, 실제로는 On Error GoTo 0으로 오류 감지를 다시 활성화하는 코드를 함께 넣는 것이 좋습니다.
Q. 매크로 실행 후 복사 영역에 점선 테두리가 계속 남아 있어요.
Application.CutCopyMode = False 코드를 매크로 마지막에 추가하면 클립보드가 비워지면서 점선 테두리가 사라집니다. 이 코드를 빠뜨리면 복사 상태가 계속 유지됩니다.
Q. 특정 시트에서만 매크로가 실행되게 하고 싶어요.
시트 이름을 코드에 직접 지정하면 됩니다. 예를 들어 Worksheets("매출").Range("A1").Copy처럼 시트 이름과 범위를 함께 입력하면 원하는 시트에서만 작업이 실행됩니다.
Q. 매크로 실행 중 오류가 발생하면 어떻게 하나요?
On Error Resume Next 구문을 추가하면 오류가 발생해도 중단되지 않고 다음 줄로 넘어갑니다. 다만 이 경우 오류가 있어도 조용히 지나가므로, On Error GoTo 0으로 오류 감지를 다시 활성화하는 코드를 함께 넣는 것이 좋습니다.
복사-붙여넣기 자동화 매크로는 코드 몇 줄만 익혀두면 반복 작업에서 큰 시간을 절약할 수 있습니다. 처음엔 옵션 하나하나가 낯설게 느껴지겠지만, 기본 코드 하나를 익힌 뒤 PasteSpecial 옵션만 바꿔가며 응용하면 다양한 상황에 대응할 수 있습니다. 특히 월간 보고서 취합이나 대량 데이터 정리처럼 매일 반복되는 작업이라면, 매크로 하나 만들어 두는 것만으로도 퇴근 시간을 크게 앞당길 수 있습니다.