• 최초 작성일: 2000-07-04
  • 최종 수정일: 2026-09-30
  • 조회수: 9 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: Cell Merge

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

某 호텔에 진입한 경찰들이 객실의 술을 마셨네 안마셨네 하는 것으로 신문지상을 가득 채우고 있군요. 정작 중요한 것은 술을 마시고 안마시고 이게 아닌데 말이지요. 린다 김 로비 의혹이 일었을 때에도 언론 에서는 몸통은 건들지 않고 되도 않은 썬글라스에만 초점을 맞추는 바람에 본질이 많이 희석되었었지요? 이래서 언론을 Necessary Evil, 즉 "필요 악"이라고 하나 봅니다.

어떤 사람은 말하더군요. 신문 지상에서 믿을 것이라곤 오늘의 날짜와 발행 홋수 뿐이라고…

혹시라도 강좌를 보시는 분 중에 언론계에 계시는 분이 있다면 오해 없으시기 바랍니다. 앞으로 더 잘해보 자고 하는 소리니까 너무 기분나쁘게만 받아들이지 마시기를…

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

Cell Merge

핵심 요약: 내용을 합치는 셀 병합

병합 전에 각 셀의 내용을 배열에 보관하면 내용을 이어 붙여 병합하고 원래대로 되돌릴 수도 있습니다.

  • 1단계: Areas.Count로 연속된 영역인지 검사합니다.
  • 2단계: 각 셀의 값을 strTemp에 이어 붙이고 strCell() 배열에 보관합니다.
  • 3단계: Merge 후 strTemp를 입력하고, 되돌릴 때는 UnMerge와 배열을 사용합니다.

Step 1: 결과 미리 보기

보통 Excel에서 여러 개의 셀을 선택한 다음 "셀 병합"을 하게 되면 맨처음의 셀에 있는 내용만 표시가 되고 나머지는 모두 지워집니다.

셀 병합 전 (예시 1)
Excel
Visual Basic
It's very Fun!!!

즉, 위 세 개의 셀을 범위로 지정한 다음 "셀 병합" 버튼을 눌러 보세요. 그러면 "… 한 셀로 병합하며 맨 행의 왼쪽에 있는 데이터만 남게 됩니다."라는 메시지가 나타나고 "확인"을 클릭하면 세 개의 셀이 합쳐지긴 하는 데 Excel이라는 문자열만 남게 될 것입니다. 그런데 경우에 따라서는 여러 개의 셀을 병합하면서 그 내 용들을 모두 나타내고 싶은 경우가 있을 수 있겠지요?

아래의 세 셀을 선택한 후 버튼을 눌러 보세요.

셀 병합 전 (예시 2)
Excel
VBA
123

어떻습니까? 원하는대로 작업이 잘 되지요? 이번 시간에는 이렇게 셀을 병합할 때 내용들도 함께 합쳤다가 다시 원상태로 되돌리는 방법(셀머지라고 이름을 지어 보았습니다)에 대해 알아보도록 하겠습니다. 코드를 살펴 볼까요?

Step 2: 코드 살펴보기

Sub CellMerge()
    Dim strTemp As String
    Dim intCount As Integer
    Dim intNum As Integer
    Dim strCell() As String
    Dim strYesNo As String
    '언제나 그렇듯이 배역을 먼저 정합니다. 변수 중에서 strCell()이라는 배열변수가 있습니다.
    '이것은 사용자가 실수로 셀 병합을 했을 경우 이것을 원래대로 되돌리기 위해 각 셀의 내용들을
    '담아두는 변수입니다. 특히 변수 선언시 배열의 크기를 지정하지 않는 변수를 '동적 배열변수'라고
    '합니다.

    Application.DisplayAlerts = False
    '특정 작업을 할 때(예를 들어 워크시트를 지울 때) 보면  "…작업을 계속 할까요 말까요?…"하고 물어
    '오지요? 그런데 DisplayAlerts 속성을 False로 지정해 두면 묻지 않고 바로 실행을 하게 됩니다.

    intNum = Selection.Cells.Count
    ReDim strCell(1 To intNum) As String
    '선택된 영역의 셀 수를 세어서 intNum 이라는 변수에 담아 둡니다.
    '그런 다음 ReDim(ReDimension) 즉, 변수 재선언문에 의해 선택된 셀 수만큼 변수를 만듭니다.
    '그래야 나중에 사용자가 작업 취소를 할 경우, 각 셀에 원래내용을 다시 뿌려줄 수가 있는 것이지요.

    With Selection
        If .Areas.Count <> 1 Then
            Application.DisplayAlerts = True
            MsgBox "셀 범위를 다시 선택하세요!", , "//Exceller"
            Exit Sub
        End If
        '이 부분은 에러를 체크하기 위한 에러 검문소입니다.
        '즉 셀병합을 하려면 연속된 영역이어야 하는데 사용자가 Ctrl키 등을 눌러 불연속적인 셀들을 선택하고
        '이 프로시저를 실행하려 할 경우, 에러 메시지를 나타내 주고 프로시저를 강제로 종료시킵니다.
    End With

    For intCount = 1 To intNum
        strTemp = strTemp & Selection.Cells(intCount)
        strCell(intCount) = Selection.Cells(intCount)
        'intNum 변수에는 지정된 영역의 셀 수값이 들어 있지요? 그러므로 For~Next 순환문에 의해 해당
        '횟수만큼 순환을 하면서 각 셀의 문자들을 &연산자를 써서 모두 연결을 하여 strTemp라는 변수에
        '저장을 해 둡니다.
        '그리고 나중에 셀 병합한 것을 원상태로 되돌리기 위해 각 셀의 내용을 동적 배열변수 strCell()에다
        '차곡차곡 담아두지요.
    Next intCount

    Selection.Merge
    Selection = strTemp
    '선택된 영역을 하나로 합친 다음(Merge), strTemp 변수에 저장된 내용을 뿌려줍니다.
    '이렇게 하면 셀 병합을 하면서 동시에 각 셀의 내용들도 연결이 되는 것이지요.
    '아래 부분은 만약에 사용자가 실수로 셀 병합을 했을 경우 이것을 원래대로 되돌리기 위한 과정입니다.

    strYesNo = MsgBox("자료가 합쳐졌지요?" & vbCr _
        & "셀을 원래대로 돌릴까요?", vbYesNo, "//Exceller")

    Application.DisplayAlerts = True
    If strYesNo = vbNo Then Exit Sub
    Selection.UnMerge
    'Merge는 선택된 영역을 하나로 합치는 기능이고 UnMerge는 그 반대이지요.
    For intCount = 1 To intNum
        Selection.Cells(intCount) = strCell(intCount)
        '지정된 영역의 셀 수만큼 반복을 하면서 동적 배열변수에 들어있던 내용을 각 셀로 다시 돌려줍니다.
    Next intCount
End Sub

마무리

생각하신 것보다 쉽지요? 그 반대입니까? 설령 코드는 눈에 잘 들어오지 않는다 하더라도 어떤 과정을 통해 이 작업이 가능하게 되는지는 잘 생각해 두시는 것이 좋습니다. Flow를 잘 한번 그려 보세요.

프로그래밍 기교, 코드 몇 줄 짜는 것도 중요하지만 그보다 더 중요한 것은 논리적인 사고를 길러나가는 것 이겠지요.

다음에 또…

정리 — 셀 병합 핵심

구분 사용한 코드 역할
연속 영역 검사 .Areas.Count <> 1 불연속 선택 방지
배열 확보 ReDim strCell(1 To intNum) 동적 배열 크기 지정
내용 연결 strTemp = strTemp & Selection.Cells(i) 값 이어 붙이기
병합 Selection.Merge 셀 병합
되돌리기 Selection.UnMerge 병합 해제

자주 묻는 질문 (FAQ)

Q1. 기본 셀 병합은 내용이 어떻게 되나요?

맨 처음(맨 위 왼쪽) 셀의 내용만 남고 나머지는 모두 지워집니다.

Q2. 동적 배열변수는 무엇인가요?

선언할 때 크기를 지정하지 않고 ReDim으로 나중에 크기를 정하는 배열 변수입니다.

Q3. Ctrl 키로 불연속 영역을 선택하면 어떻게 되나요?

Areas.Count가 1이 아니므로 다시 선택하라는 메시지를 표시하고 프로시저를 종료합니다.

마치며

코드 몇 줄보다 중요한 것은 논리적인 사고를 기르는 것입니다. Flow를 직접 그려 보시기 바랍니다.