티스토리 뷰
[ PROJECT ] 통합문서에 있는 시트를 알파벳 순으로 정렬하기
▶ 프로젝트의 목적을 정하라!
▶ 요구사항 작성하라!
- 실행하기 쉽고
- 언제나 사용가능(PERSONAL.XLSB 모듈에 코드 저장 필요)
- 열려 있는 통합문서에서 제대로 동작해야 한다.
- 에러가 없어야 한다.
▶ 프로젝트와 관련해서 아는 내용 정리하라!
▶ 작업 계획을 세운다!
▶ 추가 필요 사항 점검하라!
▶ 매크로 기록기로 필요한 사항 알아내라!
-> 필요한 코드를 직접 실행창에서 테스트 해본다.
▶ 초기설정 : 개인용 매크로 통합문서 활성화 및 모듈 생성
▶ 코드 작성하기
1) 시트명 을 변수에 저장하는 프로시져 작성
Sub SortSheets() Dim SheetNames() As String Dim i As Long Dim SheetCount As Long SheetCount = ActiveWorkbook.Worksheets.Count ReDim SheetNames(1 To SheetCount) For i = 1 To SheetCount SheetNames(i) = ActiveWorkbook.Worksheets(i).Name Debug.Print SheetNames(i) Next End Sub |
2) 정렬 프로시저를 검색하여 작성한다. ( BubbleSort )
Sub BubbleSort(List() As String) ' Sorts the List array in ascending order Dim First As Long, Last As Long Dim i As Long, j As Long Dim Temp As String First = LBound(List) Last = UBound(List) For i = First To Last - 1 For j = i + 1 To Last If List(i) > List(j) Then Temp = List(j) List(j) = List(i) List(i) = Temp End If Next j Next i End Sub |
3) 배열순으로 시트를 오름 차순으로 정렬
For i = 1 To SheetCount ActiveWorkbook.Sheets(SheetNames(i)).Move before:=ActiveWorkbook.Sheets(i) Next i |
▶ 다른 환경에서 추가 테스트해본다!
▶ 추가로 확인된 문제 해결하기
다른 환경에서 추가 테스트한 문제점 | 추가로 확인된 문제 해결하기 |
- 정렬 중 화면이 업데이트 되면서 시간이 오래 걸림 | '프로시저 시작 부분에 Application.ScreenUpdating = False ' 프로시저 마지막 부분에 Application.ScreenUpdating = True |
- 대문자 시트명이 소문자 시트명 앞에 놓이는 문제 발생 |
'방법1 : 문자열 대문자화 If UCase(List(i)) > UCase(List(j)) Then ' 방법2 : 아래의 옵션을 모듈 상단에 추가( A를 a와 동일 시 ) Option Compare Text |
- 활성화된 통합문서 미존재시 에러 발생 |
'방법1 : 열려있는 통합문서 미존재시 프로시저 종료 If ActiveWorkbook Is Nothing Then Exit Sub '방법2 : 에러처리 On Error Resume Next SheetCount = ActiveWorkbook.Worksheets.Count If Err <> 0 Then Exit Sub |
- 통합문서가 보호상태이면 Move 메소드 적용 불가 |
사용자가 보호설정한 이유가 있으니 고객에게 보호상태임을 알려 보호설정해제후 다시 시도하도록 경보 창 표시 If ActiveWorkbook.ProtectStructure Then MsgBox ActiveWorkbook.Name & " is protected.", _ vbCritical, "Cannot Sort Sheets." Exit Sub End If |
- 정렬을 마친 후 마지말 셀이 활성화됨 |
Dim OldActiveSheet As Worksheet ' 프로시저 변수 선언문 다음에 Set OldActiveSheet = ActiveSheet ScreenUpdating문 앞에 OldActiveSheet.Activate |
- 매크로 중지(Ctrl + Break) 하면 에러 발생 |
'방법1 : 매크로 중지 비활성화 application.EnableCancelKey = xlDisabled ' Ctrl + Break 활성화 Application.EnableCancelKey = xlInterrupt '방법2 : 메시지창을 이용하여 Sort할지 여부 확인 If MsgBox("Sort the sheets in the active workbook?", _ vbQuestion + vbYesNo) <> vbYes Then Exit Sub |
- 매크로 실행전으로 되돌릴 수 없다. |
▶ 유틸리티로 활용하기 : 매크로 옵션에서 바로가기키를 만들어 사용
▶ 배포 : 모듈을 내보내기하여 배포 (확장자 bas파일)
▶ 모듈 가져와 재사용하기 : PERSONAL.XLSB 프로젝트에서 가져오기하여 사용한다.
'VBA' 카테고리의 다른 글
[Excel][VBA] 사용자 정의 함수가 할 수 없는 작업 (0) | 2021.11.24 |
---|---|
[Excel][VBA] Function Procesure(함수 프로시저) (0) | 2021.11.23 |
[Excel][VBA] Sub Procesure(서브 프로시저) 다루기 (0) | 2021.11.23 |
[Excel][VBA] 텍스트 파일 조작하기 (0) | 2021.11.22 |
[Excel][VBA] 특정셀 찾기 (0) | 2021.11.22 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 사용자 정의 함수
- 개체
- 함수 프로시저
- comment.text
- Excel
- vba
- 원본 데이터
- 함수 재계산
- Option Compare Text
- 차트 레이블 추가
- 적용 범위
- 프로시저 작성 실전
- 사용자 정의 함수 사용 예
- 차트 서식변경
- Screenupdating
- 프로시저 호출
- function함수 예외
- 사용자 정의 함수 재계산
- EnableCancelKey
- ProtectStructure
- 배열
- bubble sort
- Function Procesure
- 워크시트 함수 재계산
- WorkSheet Sort
- Application.InputBox
- 참조
- 강제 재계산
- inputbox
- for each
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함