데이터가 잔뜩~ 들어있는 엑셀 시트를 이용하다 보면 셀을 병합해야할 때가 있죠. 그럴 때마다 병합할 셀을 영역으로 선택하고 셀서식 페이지를 열고 맞춤 탭을 선택한 뒤 셀병합을 체크하는 작업은 한마디로 “노가다” 입니다. 병합해야하는 셀이 몇개 안되면 모르지만 수천라인에 있는 여기저기 흩어져 있는 수백개의 셀을 병합하는 것은 노가다 중에서도 고된 노가다죠.
마침 방화벽 정책을 마이그레이션 하는 과정에서 기존의 정책을 이관시키고 관련 정책 문서를 만들어줘야 하는 상황이 생겼는데 기존 정책을 엑셀로 받아 Copy/Paste 방식으로 통합하다 보니 단위 정책들이 있는 셀을 병합해야 했습니다. 이 노가다를 팀원이 해야하는 상황이라 매크로를 만들기로 하고 인터넷을 뒤졌습니다.
그런데 인터넷을 뒤져보면 셀병합을 하는 매크로와 셀병합 시 사라지는 데이터를 유지하는 매크로는 있지만 아래 사진처럼 여러개의 열을 한꺼번에 처리하는 매크로는 찾을 수 없었습니다.
이럴 경우 보통은 병합 작업을 세번 반복해야 하는 어려움이 있습니다. 이런 병합을 한번에 해내는 매크로 입니다.
다중 for 문과 if 문을 알고 배열처리에 대한 개념이 있는 분이라면 이 매크로를 이해하는 것은 그리 어렵지 않습니다. 다만 Range로 선택된 각 열의 첫번째 셀의 값이 사라지는 문제가 있어서 한시간 정도 싸움(?)을 했습니다. 그 원인은 rStr 변수를 초기화하는 과정에서 rStr = “” 과 같이 초기화할 경우 엑셀에서 병합되는 첫번째 셀의 데이터를 제대로 표시하지 못하는 문제가 있기 때문인 듯 했습니다.
그래서 rStr 변수를 초기화할 때 각 열의 첫번째 셀의 값으로 초기화해주니 잘 수행이 되었습니다. ( rStr = cRng.Cells(1,t) 부분)
위의 매크로는 아래 화면처럼 C4 에서부터 E8 까지 선택하면 각 열 기준으로 행의 병합을 반복 수행해줍니다.
셀병합의 노가다로 고생하는 많은 분들에게 도움이 되면 좋겠네요.
주의! 행 전체를 선택하여 영역을 지정하면 무한루프에 빠질 우려가 있으니 반드시 사각형 영역 선택을 하시기 바랍니다.
그리고 매크로에 대한 자세한 설명은 생략합니다.