• 최초 작성일: 2006-09-19
  • 최종 수정일: 2026-09-30
  • 조회수: 16 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 셀 병합 해제하고 값 채우기

들어가기 전에

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

다음과 같은 질문이 올라왔습니다.

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

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

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


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

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

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

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

셀 병합 해제하고 값 채우기

핵심 요약: 병합 해제하고 빈 셀 채우기

병합된 셀 영역을 선택하고 실행하면 병합이 해제되고 빈 셀마다 위쪽 셀의 값이 채워지는 VBA 코드입니다. 피벗 테이블이나 필터 등을 쓰려면 이런 온전한 데이터베이스 형태가 필요합니다.

  • 1단계: Selection.Unmerge로 병합을 해제합니다.
  • 2단계: 빈 셀에 =R[-1]C 수식을 입력해 위쪽 값을 가져옵니다.
  • 3단계: 수식을 값으로 바꾸어 마무리합니다.

Step 1: 어떤 질문이었을까요?

질문 하나

셀 병합을 하면 맨 위의 셀만 병합된 셀에 남는데 병합이 해제된 모든 셀에 같은 내용이 들어가도록 할 수는 없나요? 일일이 채워넣기 너무 힘들어요… ㅠ.ㅠ

셀 병합이 되어 있는 <표 1>과 같은 형태의 표를 <표 2>와 같이 만들고 싶으시단 것이지요?

<표 1> (병합된 상태)

순번팀명팀원매출액
1AA-140240
60010
A-216540
2BB-129200
89920
B-280490
72230
3CC-14480
C-210220

<표 2> (병합을 해제하고 값을 채운 상태)

순번팀명팀원매출액
1AA-140240
1AA-160010
1AA-216540
2BB-129200
2BB-189920
2BB-280490
2BB-272230
3CC-14480
3CC-210220

<표 1>에서 셀 병합이 된 영역(빨간색으로 둘러싼 영역)을 범위로 지정하고 아래의 버튼을 눌러 보세요.

<표 1>과 같은 형태의 데이터는 데이터베이스로서의 활용 가치는 많이 떨어집니다. <표 2>와 같이 온전한 형태의 데이터베이스라야 엑셀의 막강한 분석 도구(피벗 테이블이나 필터, 정렬,…)을 제대로 활용할 수 있습니다.

Step 2: 코드 살펴보기

Const strID As String = "www.iExceller.com"
' 프로시저 바깥에 상수를 선언하고 값을 지정해 두었습니다.

Sub UnmergeAndFillValue()

    Dim strAddress As String
    On Error GoTo ET
    ' 유효하지 않은 개체를 선택하였거나 하는 경우에는 ET라는 레이블로 이동합니다.

    strAddress = Selection.Address

    With Selection
        .Unmerge
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        ' 워크시트 상에서 '빈 셀 채우기'를 할 때, '편집-이동' 메뉴에서 '옵션' 버튼을 클릭하고 '
        ' '빈 셀' 항목을 선택한 다음 후속 작업을 진행하게 됩니다. 이 과정을 엑셀이 알아먹도록
        ' 표현하면 위와 같이 됩니다.

    End With

    Range(strAddress).Select

    ' 아래 구문은 '빈 셀 채우기' 한 다음 수식이 입력된 부분을 '값 복사'하는 것입니다.
    ' 다른 방법도 있습니다만 SendKeys 메서드를 이용하면 더욱 간단히 해결할 수 있습니다.
    SendKeys "{F2}"
    SendKeys "{F9}"
    SendKeys "{ENTER}"

    Range(strAddress).Cells(1).Select

    MsgBox "셀 병합을 해제하고 값 채우기를 완료하였습니다!", , strID

ET:
' 만약 프로그램 실행 도중 오류가 발생하면 제어를 이곳으로 옮겨와서 수행하게 됩니다.

    If Err.Number <> 0 Then
        MsgBox Err.Description, , "오류 번호 : " & Err.Number
        Err.Clear
    End If

End Sub

SendKeys 대신 값으로 바꾸는 방법: 원본 코드는 SendKeys로 F2, F9, Enter 키를 눌러 수식을 값으로 바꿉니다. SendKeys는 실행 환경에 따라 동작이 불안정할 수 있으므로, 최근에는 아래처럼 선택 영역의 값을 자기 자신에게 다시 대입하는 방식을 많이 씁니다.

Range(strAddress).Value = Range(strAddress).Value

빈 셀이 하나도 없는 경우: SpecialCells(xlCellTypeBlanks)는 빈 셀이 없으면 오류를 일으킵니다. 이 코드는 On Error 구문으로 ET 레이블로 이동해 오류 메시지를 보여 주도록 되어 있어서 별도의 처리가 필요하지 않습니다.

오늘 내용은 비록 코드는 짧지만 여러분의 업무에 많이 활용하실 수 있는 내용이라 생각됩니다. 많이 응용해 보세요!

다음에 또…

정리 — 병합 해제 및 값 채우기 코드 핵심

구분 사용한 코드 역할
병합 해제 .Unmerge 선택 영역의 병합을 해제
빈 셀 선택 .SpecialCells(xlCellTypeBlanks) 빈 셀만 골라냄
위쪽 값 참조 .FormulaR1C1 = "=R[-1]C" 바로 위 셀을 참조하는 수식 입력
값으로 변환 SendKeys "{F2}", "{F9}", "{ENTER}" 수식을 값으로 바꿈
오류 처리 On Error GoTo ET 오류가 나면 메시지를 보여 주고 종료

자주 묻는 질문 (FAQ)

Q1. 셀 병합을 해제하면 왜 값이 맨 위 셀에만 남나요?

병합된 셀은 왼쪽 위 셀 하나에만 값을 저장합니다. 병합을 해제하면 나머지 셀은 빈 셀이 되므로 이를 채워 주는 작업이 필요합니다.

Q2. 병합된 셀이 있는 표는 왜 데이터베이스로 쓰기 어렵나요?

행마다 모든 항목이 채워져 있어야 피벗 테이블, 필터, 정렬 같은 분석 기능이 제대로 동작합니다. 병합된 표는 빈 칸이 많아 이런 기능을 사용하기 어렵습니다.

Q3. 수식을 값으로 바꿀 때 SendKeys 말고 다른 방법이 있나요?

선택 영역의 Value를 자기 자신에게 대입하는 방식(Range.Value = Range.Value)을 쓰면 키 입력을 흉내 내지 않고도 수식을 값으로 바꿀 수 있습니다.

마치며

코드는 짧지만 실무에서 활용도가 매우 높은 내용입니다. 병합된 표를 온전한 데이터베이스 형태로 바꾸어 피벗 테이블 등 분석 도구를 마음껏 활용해 보세요.