[257회 라이브 공지] 이번 주 라이브는 `3/4(수) 오후 8시` 에 진행합니다! 오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

엑셀 목차 만들기 자동화, 시트 관리를 효율적으로 하는 방법!

통합문서의 시트를 자동으로 정렬하여 목차를 생성하는 목차만들기 자동화 명령문의 동작원리와 실전 사용법을 단계별로 살펴봅니다.

# VBA

작성자 :
오빠두엑셀
최종 수정일 : 2024. 10. 03. 22:05
URL 복사
메모 남기기 : (22)

엑셀 목차 만들기 추가기능 단계별 사용방법 정리 :: 퀵 VBA 9강

목차 바로가기
영상강의


예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [퀵VBA] 엑셀 목차 만들기 CreateTOC 명령문
    완성파일
  • ✨ 엑셀 목차 만들기 자동화 추가기능 - DuTool
    회원자료

✨ 목차 만들기 프로그램을 사용하면 무엇이 좋은가요?

  1. 시트를 오름차순 또는 내림차순으로 정렬하여 자동으로 목차를 생성합니다. 따라서 시트를 정렬하지 않아도 목차가 깔끔하게 만들어집니다.
  2. 입력한 기준에 따라 목차를 그룹화 할 수 있습니다. (자리수 또는 특정 기호로 그룹화할 수 있습니다.)
  3. 시트가 많아 시트 간 이동이 어려울 경우에 대비하여, [목차로 돌아가기] 버튼을 각 시트에 생성할 수 있습니다.

.

초보자를 위한, 목차 만들기 강의

매크로 없이 간단한 함수 복사/붙여넣기로 목차를 만드는 방법은 아래 영상강의를 참고해주세요!


목차만들기 툴 사용방법

  1. 추가기능을 설치하면 엑셀 상단의 [삽입] - [DuTool] - [목차만들기] 버튼이 추가됩니다.
    1. 목차 만들기 리본버튼
    [삽입] 탭에 [목차생성] 기능이 추가됩니다.
  2. [목차생성] 버튼을 클릭하면 목차만들기 설정을 위한 창이 나타납니다.
    2 목차만들기 설정창
    [목차생성] 버튼을 클릭하면 설정창이 나타납니다.
  3. 설정창에는 [목차 그룹화] 및 [돌아가기 버튼] 체크박스가 있습니다.
    3 목차만들기 설정창 2가지 체크박스
    [목차정렬/분류] 및 [돌아가기버튼]을 설정할 수 있습니다.
  4. [목차 그룹화] 를 체크하면 목차를 오름차순 또는 내림차순으로 정렬할 수 있습니다.

    4 목차 오름차순 내림차순 정렬
    오름차순/내림차순으로 정렬합니다.
  5. 목차를 각 분류별로 묶어주기 위한 '묶을 기준'을 입력합니다. 묶을 기준은 '숫자' 또는 '특정 기호/문자'로 입력합니다.
    1. 숫자를 입력할 경우 : 입력한 자리수를 기준으로 목차를 분류합니다. (자리수 고정)

    5 시트를 2로 묶을 경우
    '숫자'를 입력할 경우 고정된 자리수로 목차가 분류됩니다.

    2. 기호를 입력할 경우: 시트 이름에서 특정 기호를 찾아, 해당 기호를 기준으로 목차를 분류합니다.

    5-1 기호로 묶을 경우
    특정 기호를 기준으로 목차를 분류합니다.
  6. 그룹화하지 않고 시트 정렬만 원할시, 묶을기준을 입력하지 않고 넘어갑니다.

    6 묶을기준 빈칸
    분류하지 않고 정렬만 할 수도 있습니다.
  7. [돌아가기 버튼]을 체크하면 '목차로 돌아가기' 버튼을 각 시트에 생성할 수 있습니다. 기본값은 A1셀 입니다.
    6 돌아가기 버튼 생성
    [목차로 돌아가기] 버튼을 생성합니다.
  8. [미리보기] 버튼을 클릭하면 생성 될 목차를 미리 볼 수 있습니다.

    8 미리보기 버튼 클릭
    설정이 완료되면 '미리보기' 버튼을 클릭합니다.
  9. 목차 목록에 이상이 없으면, [목차생성] 버튼을 클릭합니다. [목차] 시트가 맨 왼쪽 첫번째 시트로 생성됩니다.
    9 목차 생성 완료
    이상이 없으면 [목차생성] 버튼을 클릭합니다.
  10. 엑셀은 동일한 이름의 시트를 2개 이상 생성할 수 없습니다. 따라서 기존에 [목차]라는 이름을 가진 시트가 존재할 경우 현재시간이 추가된 이름으로 시트가 생성됩니다.

    10 목차 중복생성 방지
    현재시간을 추가하여 시트명의 중복을 방지합니다.

이번 강의에서 사용된 보조 명령문 (SortArray 명령문)

이번 강의에서는 배열을 정렬하는 SortArray 명령문이 보조 명령문으로 사용되었습니다. SortArray 함수에 대한 자세한 설명은 관련 포스트를 확인하세요.

'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'■ SortArray 명령문
'■ 배열을 오름차순/내림차순으로 정렬합니다.
'■ 인수 설명
'_____________vaArr       : 정렬할 배열입니다.
'_____________SortOrder     : 정렬방향입니다. (오름차순,내림차순)
'_____________NumericSort   : 숫자크기로 정렬할 여부를 결정합니다.(기본값 False, 텍스트형식 정렬)
'■ 반환값
'_____________정렬된 배열을 반환합니다.
'###############################################################
 
Function SortArray(vaArr As Variant, Optional SortOrder As XlSortOrder = xlAscending, Optional NumericSort As Boolean = True)
 
Dim i As Long: Dim j As Long
Dim vaVal As Variant
Dim Temp
 
If NumericSort = True Then
    For Each vaVal In vaArr
        If IsNumeric(vaVal) = False Then NumericSort = False: Exit For
    Next
End If
 
If NumericSort = False Then
    If SortOrder = xlAscending Then
        For i = LBound(vaArr) To UBound(vaArr) - 1
            For j = i + 1 To UBound(vaArr)
                If UCase(vaArr(i)) > UCase(vaArr(j)) Then
                    Temp = vaArr(j)
                    vaArr(j) = vaArr(i)
                    vaArr(i) = Temp
                End If
            Next j
        Next i
    Else
        For i = LBound(vaArr) To UBound(vaArr) - 1
            For j = i + 1 To UBound(vaArr)
                If UCase(vaArr(i)) < UCase(vaArr(j)) Then Temp = vaArr(j) vaArr(j) = vaArr(i) vaArr(i) = Temp End If Next j Next i End If Else If SortOrder = xlAscending Then For i = LBound(vaArr) To UBound(vaArr) - 1 For j = i + 1 To UBound(vaArr) If vaArr(i) > vaArr(j) Then
                    Temp = vaArr(j)
                    vaArr(j) = vaArr(i)
                    vaArr(i) = Temp
                End If
            Next j
        Next i
    Else
        For i = LBound(vaArr) To UBound(vaArr) - 1
            For j = i + 1 To UBound(vaArr)
                If vaArr(i) < vaArr(j) Then
                    Temp = vaArr(j)
                    vaArr(j) = vaArr(i)
                    vaArr(i) = Temp
                End If
            Next j
        Next i
    End If
End If
 
SortArray = vaArr
 
End Function

목차 만들기 매크로 전체 명령문

목차만들기 매크로의 각 단계별 동작원리는 영상강의에서 자세히 설명해드렸습니다.

Sub CreateTOC(Optional SortByLength As Variant = "", Optional SortOrder As Long = 0, Optional returnBtn As Boolean = False, Optional BtnCell As String = "A1")
 
Dim WB As Workbook: Dim WS As Worksheet: Dim tocWS As Worksheet
Dim vaArr As Variant
Dim i As Long: Dim x As Long: Dim j As Long: Dim jj As Long: x = 0: j = 0: jj = 1
Dim groupLen As Variant: Dim prefix As String: groupLen = 0
 
Application.ScreenUpdating = False
 
Set WB = ActiveWorkbook
Set tocWS = WB.Worksheets.Add(Before:=WB.Worksheets(1))
 
'임시 배열 생성
ReDim vaArr(0 To WB.Worksheets.Count - 2)
For i = 2 To WB.Worksheets.Count
    vaArr(i - 2) = WB.Worksheets(i).Name
Next
 
If SortOrder = 1 Then vaArr = SortArray(vaArr, xlAscending)
If SortOrder = -1 Then vaArr = SortArray(vaArr, xlDescending)
 
tocWS.Activate
ActiveWindow.DisplayGridlines = False
 
With tocWS
    On Error GoTo shtexist
    .Name = "목차"
resume_1:
    .Tab.Color = RGB(47, 47, 47)
    .Range("A:B").EntireColumn.ColumnWidth = 4
    .Range("4:500").EntireRow.RowHeight = 20
    .Range("2:2").Interior.Color = RGB(47, 47, 47)
    .Range("1:1").EntireRow.RowHeight = 11
 
    With .Range("B2")
        .value = "목차"
        .Font.Bold = True
        .Font.Size = 18
        .Font.Color = RGB(255, 255, 255)
    End With
 
    .Range("B4").value = "#"
    .Range("C4").value = "시트명"
    With .Range("B4").EntireRow
        .Font.Bold = True
        .Font.Color = RGB(255, 255, 255)
        .Interior.Color = RGB(89, 89, 89)
    End With
 
    For i = LBound(vaArr) To UBound(vaArr)
 
        If IsNumeric(SortByLength) = True Then
            groupLen = SortByLength
        Else
            If InStr(1, vaArr(i), SortByLength) > 0 Then groupLen = InStr(1, vaArr(i), SortByLength) - 1
        End If
        On Error Resume Next
        If Left(vaArr(i - 1), groupLen) <> Left(vaArr(i), groupLen) Then
 
            If (i = LBound(vaArr) And SortOrder = 0) Then
                j = j + 1: jj = 1
            Else
                j = j + 1: jj = 1
                .Cells(x + 5, 2).value = j
                .Cells(x + 5, 3).value = Left(vaArr(i), groupLen)
                If .Cells(x + 5, 3).value = "" Then .Cells(x + 5, 3).value = "기타항목"
                .Cells(x + 5, 2).NumberFormat = "0*."
                .Cells(x + 5, 1).EntireRow.Font.Bold = True
                .Cells(x + 5, 1).EntireRow.Interior.Color = RGB(245, 245, 245)
                x = x + 1
            End If
            On Error GoTo 0
        Else
            jj = jj + 1
        End If
 
        If blnSort = True Then prefix = "'" & j & "-"
 
        .Cells(x + 5, 2).value = prefix & jj
        .Cells(x + 5, 2).NumberFormat = "_~@"
        .Hyperlinks.Add anchor:=.Cells(x + 5, 3), Address:="", SubAddress:="'" & CStr(vaArr(i)) & "'!A1", TextToDisplay:=vaArr(i)
        .Cells(x + 5, 3).InsertIndent 1
 
        x = x + 1
    Next
 
    .Range("C:C").EntireColumn.AutoFit
 
End With
 
If returnBtn = True Then
    For i = 2 To WB.Worksheets.Count
        WB.Worksheets(i).Hyperlinks.Add anchor:=WB.Worksheets(i).Range(BtnCell), Address:="", SubAddress:=tocWS.Name & "!A1", TextToDisplay:="목차로 돌아가기"
        WB.Worksheets(i).Range(BtnCell).Font.Bold = True
    Next
End If
 
 
Application.ScreenUpdating = True
 
Exit Sub
 
shtexist:
    tocWS.Name = "목차" & Format(Now, "yyyymmddhhmmss")
    On Error GoTo 0
    Resume resume_1
 
End Sub

목차 만들기 매크로, CreateTOC 명령문 사용법

엑셀 목차만들기 매크로인 CreateTOC 명령문에 사용되는 인수는 아래와 같습니다.

CreateTOC ( [분류기준], [정렬방향], [돌아가기링크생성], [링크위치] )

CreateTOC 명령문의 간단 사용법은 아래와 같습니다. 명령문 사용법에 대한 자세한 설명은 영상강의를 참고하세요.

'1. 통합문서 시트 순서 그대로 목차를 생성
CreateTOC
'2. 시트를 오름차순으로 정렬한 뒤 목차 생성
CreateTOC SortOrder:=1
'3. 시트를 오름차순으로 정렬한 뒤, "-" 기호를 기준으로 분류
CreateTOC "-", 1
'4. 각 시트 B1 셀에 '목차로 돌아가기' 링크 생성
CreateTOC "-", 1, True, B1
댓글 22
5 (10개 평가)
윤달수
윤달수 2020.02.03 22:44
추가기능에서 DuTool이 생성되게 하려면 어떻게 하는지요.
오빠두엑셀
오빠두엑셀 작성자 2020.02.04 17:27
윤달수님 안녕하세요?^-^ 아래 링크를 확인해주시겠어요? 추가기능 설치방법은 아래 링크를 확인해주시겠어요? https://www.oppadu.com/엑셀-추가기능-설치방법/ 감사합니다.
사랑의신
사랑의신 2020.10.28 02:05
설치된 윈도우가 한글 윈도우가 아니거나 언어 기본설정이 한글로 안되어 있고 다른 언어로 되어 있으면 설치할 때 에러가 자주 발생하는 것 같아요. 여러번 해보았는데 다른 툴들도 비슷한것 같습니다. 설치할 때 파일을 받아서 짧은 영문명으로 바꾸고 설치 하면 되는 것 같네요. 윈도우에서 디렉토리 관련해서 언어가 다르면 조금 문제가 있는 것 같습니다.
솔
2020.02.11 13:15
목차를 만들 때 sheet명이 001, 002 등으로 되어있는 경우에는 1, 2 로 표시되어 링크에는 문제가 없으나 함수에 사용시 인식되지 않는 문제가 발생됩니다. 수정을 어떻게 해야 하는지요
오빠두엑셀
오빠두엑셀 작성자 2020.02.11 18:29
안녕하세요~^^* 명령문의 아래 부분을 찾아서
.Hyperlinks.Add anchor:=.Cells(x + 5, 3), Address:="", SubAddress:="'" & CStr(vaArr(i)) & "'!A1", TextToDisplay:=vaArr(i)
아래처럼 변경해보시겠어요?
.Hyperlinks.Add anchor:=.Cells(x + 5, 3), Address:="", SubAddress:="'" & CStr(vaArr(i)) & "'!A1", TextToDisplay:="'" & vaArr(i)
제 답변이 도움이 되셨으면 좋겠습니다 ^^ 좋은 의견 감사드립니다.
솔
2020.02.12 10:53
고맙습니다 정말 많은 도움이 되었고, 되고있습니다. 매일 좋은하루 보내세요
김수정
김수정 2020.03.01 16:45
안녕하세요. 좋은 영상으로 도움주셔서 감사해요. 목차 작업후 모바일에서 볼때는 바로가기 기능이 안되는데, 방법이 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.03.01 20:16
안녕하세요~^^* 모바일에서 사용하시려면, '아이폰 또는 안드로이드'용 엑셀 APP 을 사용하셔야 합니다. 이후 셀을 클릭하시면 '링크이동' 이라는 버튼이 나오는데, 버튼을 클릭하면 해당 시트로 이동하게 됩니다 ^^ 제 답변이 도움이 되셨길 바랍니다. 감사합니다.
엑셀 목차 모바일 바로가기
닥코드
닥코드 2020.04.08 10:53
좋은 내용 감사합니다.
심성만
심성만 2020.05.28 13:38
엘셀 2010 에서는 안되나요? 클릭해두 아무것도 실행이 안되는데요
오빠두엑셀
오빠두엑셀 작성자 2020.05.30 02:57
엑셀 2010에서도 사용가능합니다. ^^ 추가기능 오류 관련 설명은 아래 링크를 확인해보시겠어요? https://www.oppadu.com/%ec%97%91%ec%85%80-%ec%b6%94%ea%b0%80%ea%b8%b0%eb%8a%a5-%ec%84%a4%ec%b9%98%eb%b0%a9%eb%b2%95/
등대지기
등대지기 2020.08.08 22:28
좋은 내용 감사드립니다.
창진
창진 2021.06.17 16:17
안녕하세요 너무 편리한 기능이네요..사용하다보니 시트명을 변경하거나 추가하게되면 목차에 반영이 안되던데 변경된시트가 있을시 목차만들기를 새로 만들어야 하나요? 다른 방법이 있는지 궁금해요
오빠두엑셀
오빠두엑셀 작성자 2021.06.21 21:01
안녕하세요. 새롭게 변경되는 시트를 자동으로 인식하려면 사용중인 통합문서에 매크로 이벤트를 따로 추가해주시면 가능합니다..ㅜ 다만 어느정도 매크로 기본 작성방법을 아셔야 해결하실 수 있습니다. 추가기능으로는 구현이 어려운 부분이라 직접 작성하셔야 해결하실 수 있을 듯 합니다.
그냥
그냥 2022.02.22 10:08
안녕하세요 ^^ 이번에 새로 가입하고 목차 추가기능 잘 사용하고 있습니다 창진님께서 여쭤 본것과 같은 내용인데요 혹시 직접 작성하기 위해서 참고할만한 강좌가 있는지요? 아님 대략적으로 방향이라도 알려주시면 한번 해보려고 합니다 업무 사양서를 만들다 보니 위크시트가 계속 추가가 되는데 그때 마다 지금은 목차를 새로 만들고 기존 목차는 삭제하는 작업을 반복하는데 많이 번거롭네요 ^^ 번거로우시겠지만 조언 부탁드립니다 감사합니다
oth11021
oth11021 2021.06.17 22:55
안녕하세요 현재 영어 버젼 엑셀을 쓰고 있는데 글씨가 깨져서 나오네요 . 영어로 나오게 할수있나요 ?
오빠두엑셀
오빠두엑셀 작성자 2021.06.21 21:02
안녕하세요. 영문 버전은 조만간 업데이트 해 드리겠습니다. 감사합니다.
김송화
김송화 2023.02.04 23:39
안녕하세요. 제가 목차생성으로 목차 만들엇는데요 편집 혹은 삭제는 어떻게 하면 될까요 ? 목차 만들고 나서 다시 엑셀 켜면 삽입탭에 목차생성 단추가 없습니다.
삽입 탭
오빠두엑셀
오빠두엑셀 작성자 2023.02.05 21:53
안녕하세요. 목차생성 단추를 계속 표시하길 원하실 경우, 추가기능 형태로 등록하면 됩니다. :) 홈페이지에서 제공하는 목차생성 추가기능을 사용해보세요.
김송화
김송화 2023.02.10 23:46
감사합니다. 오늘 자주 쓰는 실무엑셀 구입하고 목록을 보니 목차생성 자동화는 없어보여요. 제가 현재 작성하고 있는 파일을 목차생성 자동화로 만들긴 햇어요. 근데 돌아가기 셀 A1셀을 수정하는 방법과 새로운 시트가 추가됏을시 목차에 반영되는 방법을 알고 싶습니다. 근데 VBA에는 초보입니다. 제가 작성한 엑셀 파일을 첨부하여 가르침 받고 싶은데요
오빠두엑셀
오빠두엑셀 작성자 2023.02.14 14:12
진짜쓰는실무엑셀 교재는 기초입문서로 VBA는 다루지 않습니다 :) VBA 기초/활용은 이전에 4회 완성으로 특강을 진행한적이 있습니다. 아래 링크를 한번 확인해보시겠어요? https://www.oppadu.com/%ec%97%91%ec%85%80-live-101%ea%b0%95/ 2-3시간씩 4회 학습하시면 실무에 필요한 대부분이 VBA 기능을 배울 수 있습니다.
강민준🤗
강민준🤗 2024.08.08 20:08
좋은 강의 감사합니다🙇‍♂️