• 최초 작성일: 2005-08-25
  • 최종 수정일: 2026-09-30
  • 조회수: 12 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 자료 형태 변경하기

들어가기 전에

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

질문 하나

답변 부탁드릴께요..

안녕하세요... 궁금한 것이 있어서 글을 남깁니다. VBA 활용법에 대한 질문인데요... (어쩌면 VBA를 사용하지 않고도 방법이 있는지는 모르겠습니다)

신상기록 시트가 있는데... 근무이력 부분에 Alt+Enter로 처리되어 있습니다. 이것을 Alt+Enter를 없애고 별도의 셀에 표시를 해 주어야 합니다.

자료가 얼마 안되면 어떻게 해 보겠는데 2000행이 넘습니다.

답변 부탁드릴께요! (첨부해 드린 자료는 보안 부탁드립니다)

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

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

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


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

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

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

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

자료 형태 변경하기

핵심 요약: 줄바꿈으로 구분된 셀을 행으로 펼치기

근무경력처럼 한 셀 안에 Alt+Enter로 여러 항목이 들어 있을 때, 항목마다 한 행씩 나누고 나머지 열의 값은 그대로 복사해 주는 VBA 코드입니다.

  • 1단계: Split 함수로 셀 값을 줄바꿈(Chr(10)) 단위 배열로 만듭니다.
  • 2단계: 해당 행을 복사해 새 시트의 행마다 붙여넣습니다.
  • 3단계: 배열의 각 값을 근무경력 열에 채우고 서식을 적용합니다.

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

질문주신 분의 경우, 신상명세서 자료인데 보안을 요하는 사항이므로 외부에 공개하지는 말아달라고 부탁을 하셨더랬습니다. 여러분도 질문을 주실 때, 외부에 공개되어서는 곤란한 자료인 경우에는 꼭(!) 알려주시기 바랍니다.

그건 그렇고… 질문 내용은 이렇습니다. 다음과 같은 신상명세서가 있는데 '근무경력' 란을 보면, 각각의 부서가 하나의 셀에 모두 입력되어 있으며, Alt+Enter 키를 사용하여 구분되어 있습니다.

Source 시트의 신상명세서 - 근무경력 칸에 Alt+Enter로 구분된 여러 부서가 한 셀에 들어 있다
아이엑셀러

이것을 다음과 같이 바꿀 수 없겠느냐 하는 것입니다.

변환 결과 - 근무경력의 부서가 한 줄에 하나씩 나뉘고 나머지 항목은 같은 값으로 채워져 있다
아이엑셀러

어떻게 하면 될까요? 버튼을 눌러 예제를 실행시켜 보고 오시기 바랍니다.

한방에 해결이 되지요? 데이터가 1000행이든 2000행이든 상관이 없습니다. 여기서는 좀더 시각적인 효과를 나타내기 위해 일부 필요한 조치를 취하지 않은 부분도 있습니다만 데이터량이 많아지면 코드를 조금더 최적화시키면 됩니다.

Step 2: 코드 살펴보기

코드를 보도록 하지요.

Sub ChangeDataForm()

    ' 필요한 변수들을 선언합니다.
    Dim wrkSource As Worksheet
    Dim wrkOutput As Worksheet
    Dim rngTarget As Range
    Dim rngTitle As Range
    Dim rngCell As Range
    Dim varTemp As Variant
    Dim i As Integer
    Dim intCount As Long

    Set wrkSource = Sheets("Source")
    Set wrkOutput = Worksheets.Add
    Set rngTitle = Range("Title")
    Set rngTarget = wrkSource.Range("A1").CurrentRegion
    ' Source 시트의 A1 셀 인접 영역을 작업 대상으로 합니다.

    rngTitle.Copy Destination:=wrkOutput.Range("A1")
    ' 표의 타이틀 부분을 복사해서 새로 삽입한 워크시트의 첫번째 행에 붙여넣습니다.
    ' '삽입-이름' 메뉴를 사용하여 이름 정의된 영역을 살펴보세요.

    intCount = 2
    ' 삽입한 시트의 2행부터 데이터를 입력하므로 변수값을 2로 지정합니다.

    For Each rngCell In rngTarget.Offset(1, 0).Resize(rngTarget.Rows.Count - 1, 1)
    ' 여기서부터 본격적인 작업에 들어갑니다. rngTarget 영역 중에서 타이틀 부분을
    ' 제외한 전체 테이블을 대상으로 순환문을 돌립니다.
    ' Resize 메서드가 오랜만에 등장을 하였군요. 범위의 크기를 재지정하기 이해 Resize
    ' 메서드를 사용한 것입니다.

        varTemp = Split(rngCell.End(xlToRight), Chr(10))
        ' Split 함수를 사용하여 Alt+Enter 구분된 내용을 대상으로 배열을 만듭니다.

        Range(rngCell, rngCell.End(xlToRight)).Copy
        ' 행 중에서 데이터가 들어있는 영역을 복사합니다.

        For i = 0 To UBound(varTemp)
        ' varTemp 변수에 저장된 값들을 대상으로 순환문을 돌립니다. varTemp 변수에는
        ' Split 함수에 의해 Alt+Enter로 구분된 문자열들이 보관되어 있는데, 이것을 차례대로
        ' 셀에 옮겨담는 과정입니다.

            wrkOutput.Cells(intCount, 1).PasteSpecial
            wrkOutput.Cells(intCount, 6) = varTemp(i)
            intCount = intCount + 1
        Next i
    Next rngCell

    ' 작성된 영역에 대해 자동 서식을 설정합니다. 아래 부분은 자동 서식을 입히는 과정을
    ' 매크로 기록기로 기록한 다음, 편집해서 사용하면 됩니다.
    Range("A1").Select
    Selection.CurrentRegion.AutoFormat Format:=xlRangeAutoFormatList2, Number:=True, Font:= _
        True, Alignment:=True, Border:=True, Pattern:=True, Width:=True

    Columns.AutoFit
    Application.CutCopyMode = False
    MsgBox "분리작업을 완료하였습니다!", , "www.iExceller.com"

End Sub

손으로 직접 작업을 할 때의 순서를 잘 생각해 보시면 이것을 어떻게 프로그래밍 할 것인가 구체화 할 수 있을 것입니다.

링컨의 말 가운데 이런 구절이 있습니다.

"대체로, 사람은 행복해지겠다고 결심하는 강도에 따라서 행복해진다"

다음에 또…

정리 — 자료 형태 변경 코드 핵심

구분 사용한 코드 역할
새 시트 추가 Worksheets.Add 결과를 표시할 시트 삽입
줄바꿈 분리 Split(rngCell.End(xlToRight), Chr(10)) Alt+Enter 단위로 나눈 배열 생성
행 복사 Range(rngCell, rngCell.End(xlToRight)).Copy 데이터가 있는 행 영역 복사
배열 순환 For i = 0 To UBound(varTemp) 나뉜 항목 수만큼 반복
서식 지정 CurrentRegion.AutoFormat 결과 표에 자동 서식 적용

자주 묻는 질문 (FAQ)

Q1. Alt+Enter로 입력한 줄바꿈은 VBA에서 어떤 문자인가요?

셀 안의 줄바꿈은 아스키 코드 10번인 Chr(10), 즉 vbLf 문자입니다. Split 함수의 구분자로 Chr(10)을 지정하면 줄바꿈 단위로 나눌 수 있습니다.

Q2. VBA 없이 줄바꿈으로 구분된 셀을 나눌 수는 없나요?

텍스트 나누기 기능에서 Ctrl+J를 구분 기호로 지정하면 열 방향으로 나눌 수 있습니다. 행 방향으로 펼치려면 Power Query의 구분 기호별 열 분할(행으로) 기능을 사용하면 코드 없이도 가능합니다.

Q3. 데이터가 아주 많을 때 속도를 높이려면 어떻게 하나요?

실행 전에 Application.ScreenUpdating을 False로 지정하고, 행마다 복사·붙여넣기 하는 대신 배열에 담아 한 번에 대입하도록 코드를 최적화하면 훨씬 빨라집니다.

마치며

손으로 직접 작업을 할 때의 순서를 잘 생각해 보면 어떻게 프로그래밍할지가 구체화됩니다. 데이터가 2000행이든 그 이상이든 같은 방식으로 한 번에 해결할 수 있습니다.