• 최초 작성일: 2025-01-24
  • 최종 수정일: 2026-09-27
  • 조회수: 23 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA 파워 코딩 250회 - 병합 해제하고 값 채우기

들어가기 전에

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

몰입할 대상이 있다는 것

코드 편집기 화면에 몰입한 모습을 표현한 그림
아이엑셀러

무언가 몰입할 대상이 있다는 건 멋진 일입니다. 여러분들에게 그 대상 중 하나가 VBA가 되길 기대해 봅니다.

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

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

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


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

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

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

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

셀 병합을 해제하고 값을 채워넣는 Code

핵심 요약: 병합된 셀을 풀고 빈 셀에 위쪽 값 채우기

UnMerge로 병합을 해제하고, SpecialCells(xlCellTypeBlanks)로 찾은 빈 셀에 바로 윗 셀을 참조하는 수식을 입력한 뒤 값으로 붙여넣으면 피벗 테이블, 필터, 정렬을 쓸 수 있는 온전한 표가 됩니다.

  • 문제: 병합된 셀이 있으면 데이터베이스로서 활용도가 떨어짐
  • 범위 선택: Application.InputBox(Type:=8)로 영역 지정
  • 핵심 코드: .UnMerge → .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" → 값 붙여넣기
  • 대안: PasteSpecial 대신 SendKeys 메서드 사용 가능

병합된 셀을 해제하고 값 채우기

표 내부에 병합된 셀이 있으면 데이터베이스로서 활용도가 떨어집니다. [표 2]와 같이 온전한 형태의 테이블 구조가 되어야 엑셀의 다양한 분석 도구(피벗 테이블이나 필터, 정렬 등)들을 제대로 활용할 수 있습니다. '값 채우기' 버튼을 클릭하고 범위를 지정하면 [표 1]과 같은 테이블이 [표 2]와 같은 형태로 바뀝니다.

병합된 셀이 있는 표 1과 병합을 해제하고 값을 채운 표 2를 나란히 비교한 그림
아이엑셀러

'값 채우기' 버튼에 연결된 코드

'값 채우기' 버튼에 연결된 코드는 다음과 같습니다.

Sub UnmergeAndFillValue()
    Dim rngTarget As Range            ' 작업 대상 영역에 접근하기 위한 변수
    Dim strAddress As String          ' 선택 영역의 주소를 저장하기 위한 변수
    On Error GoTo ET                  ' 오류 발생 시 ET 레이블로 이동
    strAddress = "A3:C11"             ' 작업 대상 영역의 주소를 변수에 할당

    Set rngTarget = Application.InputBox("영역을 선택하세요", Type:=8, Default:=strAddress)
                                      ' InputBox 함수를 이용하여 작업 대상 영역 선택
    With rngTarget                    ' 작업 대상 영역에 대하여...
        .UnMerge                      ' 셀 병합 해제
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
                                      ' 공백 셀인 경우 바로 윗 셀 값을 가져옴.
        .Copy                         ' 셀 복사
        .PasteSpecial Paste:=xlPasteValues    ' 값 붙여넣기
    End With

    Application.CutCopyMode = False   ' 셀 선택 모드 해제

ET:                                   ' 실행 도중 오류가 발생한 경우 이 곳으로 이동
    If Err.Number <> 0 Then
        MsgBox Err.Description, , "오류 번호 : " & Err.Number
        Err.Clear
    End If
End Sub

PasteSpecial 대신 SendKeys 메서드 이용하기

PasteSpecial 대신에 SendKeys 메서드를 이용할 수도 있겠습니다. 위 코드에서 With ~ End With 부분을 다음 코드로 대체하면 됩니다.

    With rngTarget
        .UnMerge
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
    End With

    Range(strAddress).Select
    SendKeys "{F2}"
    SendKeys "{F9}"
    SendKeys "{ENTER}"

참고: 이미지에 대하여

이 글은 원래 네이버 포스트에 게재되었던 글로, 네이버 포스트 서비스 종료로 네이버 블로그로 옮기는 과정에서 원본 이미지가 소실되었습니다. 위 이미지는 본문 설명을 바탕으로 당시 화면 구성을 재구성한 예시 이미지이며, 실제 엑셀 화면과 세부 디자인(버전별 UI)은 다를 수 있습니다. 첫머리의 그림은 원본이 아니라 '몰입'의 의미를 표현하려고 새로 그린 것이고, [표 1], [표 2]의 지역, 지점, 매출 데이터는 예시입니다.

정리 — 병합 해제 후 값 채우기 코드의 구성

코드 역할
Application.InputBox(Type:=8) 작업 대상 영역을 마우스로 선택받음 (기본값 A3:C11)
.UnMerge 선택 영역의 셀 병합 해제
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" 빈 셀만 골라 바로 윗 셀의 값을 가져오는 수식 입력
.Copy, .PasteSpecial xlPasteValues 수식을 값으로 변환 (SendKeys 방식으로 대체 가능)
On Error GoTo ET 오류 발생 시 오류 번호와 설명을 메시지 상자로 표시

자주 묻는 질문 (FAQ)

Q1. 표에 병합된 셀이 있으면 왜 문제가 되나요?

표 내부에 병합된 셀이 있으면 데이터베이스로서 활용도가 떨어집니다. 피벗 테이블, 필터, 정렬 같은 엑셀의 분석 도구를 제대로 쓰려면 병합이 없는 온전한 형태의 테이블 구조가 되어야 합니다.

Q2. 병합을 해제한 뒤 생긴 빈 셀은 어떻게 채우나요?

SpecialCells(xlCellTypeBlanks)로 빈 셀만 골라 FormulaR1C1 = "=R[-1]C"를 입력하면 바로 윗 셀의 값을 가져옵니다. 그런 다음 복사하여 값으로 붙여넣으면 수식이 값으로 바뀝니다.

Q3. 선택한 범위에 빈 셀이 없으면 어떻게 되나요?

SpecialCells는 조건에 맞는 셀이 없으면 오류가 발생합니다. 예제 코드는 On Error GoTo ET로 오류를 처리하여 오류 번호와 설명을 메시지 상자로 보여 줍니다.

마치며

병합된 셀만 풀어도 표가 훨씬 쓸 만한 데이터로 바뀝니다. 코드 몇 줄로 한 번에 끝내 보세요!
VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 정문 왼쪽에 있는 'VBA 강좌 - VBA 입문강좌'를 읽어보시면 이해가 빠릅니다.