• 최초 작성일: 2007-10-31
  • 최종 수정일: 2026-09-30
  • 조회수: 19 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 행 삽입 후 값 채우기

들어가기 전에

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

질문 하나

행간 동일 인물 비교 후 빈 셀 삽입하고 동일인 기본 데이타 빈 셀에 넣는 방법 좀 부탁드립니다. 전임자가 만들어 놨는데 이해도 안가고… 내용은 첨부파일 안에 설명 하였습니다.. 고수님들의 한수 가르침 부탁드립니다.

질문자가 첨부한 예제 - 번호, 성명, 사원번호, 주소, 시설구분, 영업소, 지수 열로 구성된 표
아이엑셀러

이름, 사원번호, 주소를 비교하여 동일인이 나타났을 때, 마지막 동일인 다음줄에 빈 줄을 삽입하고, 삽입된 빈 줄 위의 성명, 사원번호 ,주소 데이터를 삽입된 빈 줄에 넣습니다. 한 명일 경우에도 다음 줄에 위와 동일하게 빈 줄을 삽입하고 윗 줄의 성명, 사원번호, 주소 데이터를 넣어야 합니다.

회사에서 CRM이나 KM(Knowledge Management) 시스템을 구축해 놓아도 제대로 정착하는 사례를 찾기 어려운 이유가 바로 여기에 있지 않나 생각됩니다.

인프라는 많은 돈과 시간을 들이면 누구나 삐까뻔쩍하게 구축할 수 있지만 그것을 활용하는 사람들의 마인드가 뒷받침되지 않으면 절대로 성공할 수 없습니다.

우리는 흔히 자신이 회사 생활을 하면서 축적한 고객 정보나 업무 노하우, 각종 스킬, 이런 것들을 자신만의 경쟁력이라고 생각하는 경향이 있습니다. 하지만… 과연 직장 생활을 하면서 얻은 이러한 지식들이 온전히 자신만의 것이라 자신있게 말할 수 있을까요?

내가 가진 지식을 공개하지 않으면 다른 사람도 공개하지 않을 것입니다! 내가 아는 것이 전부인양 숨겨놓고 안주하고 있으면 그 이상 발전하기 어렵습니다.

내가 지금 보유하게 된 지식도 조직이라는 울타리 안에서, 다른 동료들이 벌어준 돈을 투자하여 얻게 된 것입니다.

내가 아는 지식을 나누면 언젠가는, 어떤 형태로든 복리로 되돌려 받게 됩니다. 지식은 나누는 것은 남을 위한 것이 아니라 바로 나 자신을 위한 것입니다.

Exceller는 데이터베이스와 관련된 문제나 정보 공유가 잘 안된다는 얘기만 나오면 흥분하는 경향이 없지 않습니다(평소에는 전혀 그렇지 않은데… ^^;).

흥분을 가라 앉히고… 문제를 해결해 보도록 하지요.

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

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

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


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

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

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

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

행 삽입 후 값 채우기

핵심 요약: 동일인 아래에 빈 행을 넣고 위 데이터로 채우기

사원번호가 같은 데이터 그룹의 마지막 행 다음에 빈 행을 삽입하고, 삽입된 행을 바로 위 행의 성명·사원번호·주소로 채우는 매크로입니다.

  • 1단계: 사원번호 열의 값이 있는 영역을 작업 대상으로 지정합니다.
  • 2단계: 아래에서 위로 순환하면서 사원번호가 바뀌는 지점에 행을 삽입합니다.
  • 3단계: 빈 행을 찾아 바로 위 행의 값을 채우고 표 서식을 적용합니다.

Step 1: 동일 사원번호 아래에 행 삽입하고 값 채우기

예제 파일에서 버튼을 클릭하면 아래 코드가 실행됩니다. 사원번호가 바뀌는 지점마다 빈 행을 삽입하고, 삽입된 빈 행에 바로 위 행의 데이터를 채워 넣는 코드입니다.

Sub FillUpperContent()

    Dim rngArea As Range
    Dim r As Long
    Dim i As Integer
    Dim intNum As Integer
    Dim strSerial As String, strName As String, strNumber As String
    Dim strAddress As String, strCategory As String
    On Error GoTo ET

    '작업 할 워크시트로 이동합니다.
    Application.Goto Sheets("Workplace").Range("A1"), True
    MsgBox "중복된 사원번호가 발견되면 행을 삽입합니다.", , "www.iExceller.com"

    Set rngArea = ActiveSheet.Columns(3).SpecialCells(xlTextValues)
    '활성화 된 시트의 3번째 컬럼(사원번호) 중에서 값이 들어있는 셀을 작업 영역으로 설정합니다.

    r = rngArea.Rows.Count
    intNum = 1

    With rngArea
        For i = r To 3 Step -1
            If .Cells(i) = .Cells(i).Offset(-1, 0) Then
            '사원번호를 기준으로 동일 자료 여부 점검합니다.

            Else
                .Cells(i).EntireRow.Insert
                '바로 위 데이터와 같은 값이 발견되면 행을 하나 삽입합니다.

            End If
        Next i

        For i = 2 To ActiveSheet.UsedRange.Rows.Count + 1
            If IsEmpty(.Cells(i)) Then
            'rngArea 영역에서 공란 셀이 발견되면 바로 위 데이터 값을 가져옵니다.

                .Cells(i, 0) = .Cells(i, 0).Offset(-1, 0)
                .Cells(i, 1) = .Cells(i, 0).Offset(-1, 1)
                .Cells(i, 2) = .Cells(i, 0).Offset(-1, 2)
                .Cells(i, 3) = .Cells(i, 0).Offset(-1, 3)
                .Cells(i, 4) = .Cells(i, 0).Offset(-1, 4)
                .Cells(i, 5) = .Cells(i, 0).Offset(-1, 5)
                intNum = intNum + 1
            Else
                intNum = 1
            End If
        Next i
    End With

    '엑셀 2007의 표 기능을 적용합니다. 이전 버전의 경우에는 '자동 서식' 기능을 사용하면 됩니다.
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion, , xlYes).Name = "표1"
    ActiveSheet.ListObjects("표1").TableStyle = "TableStyleMedium7"

ET:
'오류 발생 시에 대비한 에러 트래핑 구문입니다. 거의 하나의 공식처럼 사용되니까 눈여겨 보세요.

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

End Sub

원문 오류 수정: 코드 끝의 오류 처리 구문이 MsgBox Err.Description, "오류 번호: " & Err.Number로 되어 있었습니다. MsgBox의 두 번째 인수는 버튼 종류(숫자)이므로 제목을 넣으려면 쉼표를 하나 더 넣어 MsgBox Err.Description, , "오류 번호: " & Err.Number로 써야 합니다. 그대로 바로잡았습니다.

참고 - 코드의 흐름: 첫 번째 For 순환문은 아래에서 위로 거슬러 올라가며 사원번호가 바로 위 행과 다른 지점에 행을 삽입합니다. 위에서 아래로 진행하면 행이 삽입될 때마다 행 번호가 밀려 꼬이기 때문에 반드시 아래에서 위로 진행해야 합니다. 두 번째 순환문은 비어 있는 행을 찾아 바로 위 행의 값을 복사해 채웁니다.

시이~월의 마지막 밤, 아니 낮이로군요. 한달 마무리 잘 하시고 11월에 다시 뵙겠습니다.

다음 시간에 또…

정리 — 행 삽입 후 값 채우기 코드 핵심

구분 사용한 코드 역할
작업 영역 Columns(3).SpecialCells(xlTextValues) 사원번호 열에서 값이 있는 셀만 지정
동일인 판단 .Cells(i) = .Cells(i).Offset(-1, 0) 사원번호가 바로 위 행과 같은지 비교
행 삽입 .Cells(i).EntireRow.Insert 사원번호가 달라지는 위치에 빈 행 삽입
값 채우기 .Cells(i, 0) = .Cells(i, 0).Offset(-1, 0) 빈 행에 바로 위 행의 값을 복사
표 서식 ListObjects.Add(xlSrcRange, ...) 엑셀 2007의 표 기능으로 서식 적용

자주 묻는 질문 (FAQ)

Q1. 행을 삽입하는 순환문을 아래에서 위로 돌리는 이유는 무엇인가요?

위에서 아래로 순환하면서 행을 삽입하면 삽입할 때마다 아래쪽 행 번호가 밀려서 검사할 행이 어긋납니다. 아래에서 위로 진행하면 아직 검사하지 않은 위쪽 행 번호는 바뀌지 않으므로 안전합니다.

Q2. 사원번호 대신 다른 열을 기준으로 하려면 어떻게 하나요?

작업 영역을 지정하는 Columns(3) 부분을 기준으로 삼을 열 번호로 바꾸면 됩니다. 값을 채우는 Cells(i, 0) ~ Cells(i, 5) 구문도 열 위치에 맞게 함께 조정해 주세요.

Q3. 엑셀 2007 이전 버전에서는 표 서식을 어떻게 적용하나요?

표(ListObjects) 기능은 엑셀 2007에서 추가되었습니다. 이전 버전에서는 자동 서식 기능을 사용하면 비슷한 결과를 얻을 수 있습니다.

마치며

행을 삽입하는 작업은 아래에서 위로 진행해야 꼬이지 않는다는 점만 기억해 두면 어렵지 않습니다. 여러분의 데이터 구조에 맞게 기준 열과 채울 열을 바꿔서 활용해 보세요!