Programming/MS Excel VBA

VBA Code: 엑셀 시트를 이름 순으로 정렬(오름차순/내림차순)

레드마티즈 2024. 2. 22. 23:29
728x90

여러분은 업무 내용중 핵심내용이나 기억해야할 내용을 기록할 때 어떤 도구를 사용하시나요?

 

동기화를 지원하는 Web 기반 여러가지 좋은 도구들이 참 많이 있지만 사내 보안상 이곳도 저곳도 업로드 Traffice이 막힌 경우는 결국 동기화는 포기하고 원노트나 엑셀에 기록하는 수밖에 없죠...

 

저도 사내 정책상 어쩔수 없이 (동기화도 안되는)원노트에 대부분의 업무 주요 내용을 통합하는데, 원노트는 아직도 검색 기능이 부실한 관계로 정말 중요한 자료(빨리 검색해야 하는)와 숫자를 다루는 데이터는 결국 엑셀로 모일수 밖에 없는 것이 현실인것 같습니다.

 

엑셀에 이런저런 주요 요약 내용을 추가하다보니 시트는 점점 늘어나고 어느날 부턴가 세로 스크롤 만큼 가로 스크롤도 많이 하게 되더군요^^;

 

시트가 많아지면 시트간 이동도 쉽지 않은데요, 이 때는 좌측하단 시트 좌우 이동 버튼(?)을 클릭하기 보다 해당 위치에서 마우스 우클릭을 하시면 

 

시트 이동 버튼

 

아래와 같이 시트 목록이 나오는데, 여기서 원하는 시트를 더블클릭 하시면 시트간 이동이 비교적 수월합니다.

활성화 창에서 텍스트 점프 기능도 작동합니다. 아래와 같은 상황에서 키보드 B를 입력하면 B 시트가 선택됩니다.

 

마우스 우클릭시 활성화되는 시트 목록 창

 

사설이 길었는데요, 오늘 제가 VBA로 해결하고자 하는 과제는 시트가 점점 늘어나서 뒤죽박죽인 상황에서, 시트를 이름순으로 정렬을 하고자 합니다.

 

VBA 창을 열고 아래 코드를 실행하면 

Sub SortSheets()

    Dim i As Integer
    Dim j As Integer
    Dim userResult As VbMsgBoxResult
   
    userResult = MsgBox("오름차순 정렬은 [예]," & vbNewLine _
    & "내림차순 정렬은 [아니요]," & vbNewLine _
    & "정렬작업을 취소하려면 [취소]를 클릭하세요", _
    vbQuestion + vbYesNoCancel, "Sheet 정렬 질문창")
   
   
        For i = 1 To Sheets.Count
       
            For j = 1 To Sheets.Count - 1
               
                '오름차순 정렬 선택
                If userResult = vbYes Then
                    'UCase$ -> 시트 이름을 대문자로 변환
                    If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
                        Sheets(j).Move After:=Sheets(j + 1)
                    End If
                   
                '내림차순 정렬 선택
                ElseIf userResult = vbNo Then
                    'UCase$ -> 시트 이름을 대문자로 변환
                    If UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name) Then
                        Sheets(j).Move After:=Sheets(j + 1)
                    End If
                End If
               
            Next j
           
        Next i
       
End Sub

 

아래와 같은 대화상자가 나타납니다.

 

대화상자

 

오름차순 정렬시 "예", 내림차순 정렬시 "아니요", 정렬 작업 취소시는 "취소" 버튼을 클릭하시면 됩니다.

 

예시로 시트 이름을 숫자, 영문, 한글을 혼용해서 작성해 보았는데요,

오름차순 정렬 우선순위는 숫자 - 영문 - 한글 이고
내림차순 정렬 우선순위는 한글 - 영문 - 숫자 입니다.

 

아래는 오름차순 정렬 후 입니다.

 

다음은 내림차순 정렬 후 입니다.

 

감사합니다.