여러분 성함이 박원순이 아닌 이상 서류 더미가 쌓이는 게 바람직한 일이라고 생각하지는 않으실 겁니다. 마이크로소프트(MS) 엑셀에서 시트가 늘어나는 것도 마찬가지. 다산 정약용 선생이 서류 분량을 기가 막히게 줄인 일로 괜히 정조 임금에게 칭찬을 받은 게 아닙니다.
사실 엑셀 시트가 몇 장 되지 않는다면 Ctrl+C/V가 빠릅니다. 그런데 양이 늘어나면 늘어날수록 Ctrl+C/V로 해결하는 데 한계가 있을 수밖에 없습니다. 이럴 때는 자동화를 고민해야 합니다.
제가 엑셀 시트를 자동으로 합치고 싶다는 생각을 하게 된 건 현재까지 올해 남자프로테니스(ATP)투어 상금 순위를 정리한 PDF 파일을 '클레버PDF'라는 사이트에서 엑셀 형식으로 바꾼 다음이었습니다.
이 PDF 파일은 69쪽짜리였는데 변환 결과 각 페이지별로 시트가 하나씩 나왔습니다. (적어도 저한테는) 확실히 Ctrl+C/V로 해결하기에는 많은 분량이었습니다.
이럴 때는 어떻게 해야 할까요? 'MS 엑셀 셀에서 인터넷주소(URL) 추출하기' 포스트에서 말씀드린 것처럼 엑셀에는 'VBA(Visual Basic for Application)'라고 부르는 프로그래밍 언어가 들어 있습니다. VBA를 쓰면 각종 반복 업무를 자동으로 처리하는 게 가능합니다. VBA를 쓰면 물론 시트를 합치는 것도 가능합니다.
이제부터 드리는 설명은 '엑셀 2016' 기준입니다. 버전이 따르면 작동하지 않을 수도 있습니다.
엑셀에서 VBA 기능을 활용하시려면 Alt+F11을 누릅니다. 그러면 새 창이 하나 뜨는데 메뉴에서 '실행 - 매크로 실행'을 선택하면 아래 같은 창이 나타납니다. 여기서 '매크로 이름'에 적당한 걸 넣으시고 만들기를 누릅니다.
그러면 코드 입력 창이 나옵니다. 아래 코드를 Ctrl+C/V하셔서 붙여 넣습니다. 이 코드는 모든 시트 내용을 첫 번째 시트 아래 붙여 넣으라는 내용입니다.
Sub sheetMerge()
Dim i As Integer
Dim sht As Worksheet
Dim rng As Range
Set sht = Sheets(1)
For i = 2 To Sheets.Count
Set rng = sht.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Sheets(i).UsedRange.Copy rng
Next i
End Sub
노파심에 말씀드리면 이미 코드 입력창에 이 코드 맨 첫 줄 'Sub sheetMerge()' 그리고 마지막 줄 'End Sub'가 나와 있습니다. 이 부분까지 전부 덮어 씌우시면 됩니다.
입력이 끝났으면 창을 닫고 메뉴에서 '매크로 - 매크로 실행'으로 가셔서 이 매크로를 실행하시면 그만입니다.
이 매크로를 실행했더니 아래 그림처럼 69번째 페이지까지 첫 번째 시트에 잘 들어왔습니다.
살면서 이런 기능이 필요할 때가 몇 번이나 있을까 싶지만 혹시 저처럼 시트를 합치고 싶으신데 방법을 몰라 고민 중인 분이 계실까 하여 남겨 놓습니다.
댓글,