VBA:: 엑셀 기본 스타일만 남기고 사용자 정의 항목 제거하기

Sub RemoveNonDefaultCellStylesFromWorkbook()
    Dim st As Style
    Dim defaultStyles As Variant
    Dim i As Long
    Dim isDefault As Boolean
    Dim normalStyle As String
    Dim goodStyle As String

    ' 기본 스타일명 감지 (영문/한글)
    On Error Resume Next
    normalStyle = ActiveWorkbook.Styles("Normal").NameLocal
    goodStyle = ActiveWorkbook.Styles("Good").NameLocal
    On Error GoTo 0

    ' 한글/영문 기본 스타일 배열 설정 (동일한 스타일명 기준)
    defaultStyles = Array( _
        "20% - 강조색1", "20% - 강조색2", "20% - 강조색3", "20% - 강조색4", "20% - 강조색5", "20% - 강조색6", _
        "40% - 강조색1", "40% - 강조색2", "40% - 강조색3", "40% - 강조색4", "40% - 강조색5", "40% - 강조색6", _
        "60% - 강조색1", "60% - 강조색2", "60% - 강조색3", "60% - 강조색4", "60% - 강조색5", "60% - 강조색6", _
        "강조색1", "강조색2", "강조색3", "강조색4", "강조색5", "강조색6", _
        "경고문", "계산", "나쁨", "메모", "백분율", "보통", "설명 텍스트", "셀 확인", _
        "쉼표", "쉼표 [0]", "연결된 셀", "요약", "입력", "제목", "제목 1", "제목 2", "제목 3", "제목 4", _
        "좋음", "출력", "통화", "통화 [0]", "표준", _
        "20% - Accent1", "20% - Accent2", "20% - Accent3", "20% - Accent4", "20% - Accent5", "20% - Accent6", _
        "40% - Accent1", "40% - Accent2", "40% - Accent3", "40% - Accent4", "40% - Accent5", "40% - Accent6", _
        "60% - Accent1", "60% - Accent2", "60% - Accent3", "60% - Accent4", "60% - Accent5", "60% - Accent6", _
        "Accent1", "Accent2", "Accent3", "Accent4", "Accent5", "Accent6", _
        "Bad", "Calculation", "Check Cell", "Comma", "Comma [0]", "Currency", "Currency [0]", _
        "Explanatory Text", "Good", "Input", "Linked Cell", "Neutral", "Note", "Output", "Percent", _
        "Title", "Heading 1", "Heading 2", "Heading 3", "Heading 4", "Total", "Warning Text", "Standard", "Summary" _
    )

    Application.ScreenUpdating = False

    ' 스타일을 뒤에서부터 삭제 (앞에서부터 삭제하면 인덱스 오류 발생 가능)
    For i = ActiveWorkbook.Styles.Count To 1 Step -1
        Set st = ActiveWorkbook.Styles(i)
        isDefault = False
        For Each def In defaultStyles
            If st.NameLocal = def Then
                isDefault = True
                Exit For
            End If
        Next def
        ' 기본 스타일이 아니고, 사용 중이 아니라면 제거
        If Not isDefault Then
            On Error Resume Next
            st.Delete
            On Error GoTo 0
        End If
    Next i

    Application.ScreenUpdating = True

    MsgBox "기본 스타일을 제외한 모든 스타일이 삭제되었습니다."
End Sub

위처럼 입력하면 엑셀에서 빈 워크북을 생성했을 때의 스타일들만 남게 됩니다.

댓글