| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- STP #Topology
- 트랜지스터 #전자회로 #BJT #MOSFET #공학원리 #전자공학
- NETCONF #YANG #SNMP #
- 스트라이핑 #미러링 #패리티 #리빌딩 #핫스페어
- MPLS #IPSec #SD-WAN #SASE
- PoE #PoC #EoC #이중화 #인프라 #전기통신
- CA #MIMO #CoMP #Relay
- 애드센스 #최적화 #Adsense
- 통신이론
- 라인코딩 #Line Coding
- 차량감지기 #VDS #CCTV #AI #차량
- RAID 01 #RAID 10
- das #nas #san #스토리지 #storage #스위치
- 이더넷 #이더넷II #정보통신
- 웨이블릿 #Wavelet #파동 #신축성
- 코어 #광케이블 #클래딩 #전반사 #코팅 #임계각 #전반사 #스넬의 법칙
- 오버레이 #언더레이 #터널링 #캡슐화 #유연성
- 접지저항 #통신설비 #접지 #ground
- Content #operation #RPC #Commit
- ERPS #STP #RPL #G.8032 #R-APS #50ms
- 멀티캐스트 #IGMP #클래스D #PIM #배달 트리
- 미국기술사 #PE #미국 기사 #FE #전자공학과 #단기합격 #전자공학 #전기공학 #ECC #Electronic #Electrical and computer #FE 문제집
- RAID #RAID0 #RAID 1 #RAID 10 #디스크 #스토리지
- HA #LACP #VRRP #Link #이중화
- 망중립성 #기술중립성
- 정보이론 #엔트로피 #상호정보량 #통신이론
- vlan
- 공간 #시간 #주파수 #편파 #사이트 #각 #다이버시티
- AWGN #백색잡음 #통신 #화이트노이즈
- Today
- Total
Creative Thinking Warehouse To be Rich
[엑셀 VBA] 정렬(Sort)하기 본문
외부에서 가져온 데이터를 날짜/시각이나 번호에 따라서 순서대로 정렬해야 할 때가 있다.
이때 VBA 에서는 Sort라는 개체를 이용하여 정렬 작업을 한다.
Sub Sort1()
With ThisWorkbook.Sheets(1).Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A2:" & ThisWorkbook.Sheets(1).Range("A2").
End(xlDown).Address), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A2:" & ThisWorkbook.Sheets(1).Range("C2").End(xlDown).Address)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
1) With ThisWorkbook.Sheets(1).Sort
정렬을 할 시트를 지정하고 이를 With문으로 선언합니다. With ~ End With문은 앞부분이 같은 여러 줄의 코드를 작성할 때
반복하는 각 줄의 앞부분을 한 번씩만 기술하기 위해서 사용하는 구문입니다.
즉, 다음과 같은 코드가 있다고 가정해 봅시다.
Abc.code1
Abc.code2
앞부분이 Abc로 같은 코드를 여러 줄 작성할 때 With문을 이용하면 다음과 같이 간단하게 작성할 수 있습니다.
With Abc
.code1
.code2
End With
2) .SortFields.Clear
SortFields는 정렬을 하기 전에 정렬에 필요한 설정 사항들을 저장하여 가지고 있는 개체입니다.
이전에 설정된 정렬 사항들이 있다면 지워서 초기화합니다.
3) .SortFields.Add
정렬에 대한 설정 정보를 가질 SortFields를 새로 추가합니다.
4) Key:=Range("A2:" & ThisWorkbook.Sheets(1).Range("A2").End(xlDown).Address)
정렬의 기준이 되는 키(Key) 영역을 설정합니다. 데이터가 몇 건이 들어 있는지 알지 못할 때
데이터 끝을 찾아내는 구문을 이용하여 마지막 행의 첫 셀 주소를 가져와 연결합니다.
예문에서 위 구문은 결국 Key:=Range("A2:A6")이 됩니다.
5) Order:=xlAscending
Order는 정렬 방향을 지정합니다. xlAscending은 오름차순으로 정렬하라는 의미입니다.
오름차순은 키(Key) 필드가 1,2,3, ... 과 같이 값이 커지는 순서로 정렬하고, 반대로 xlDescending은 ... 3,2,1과 같이 역순으로 정렬함을 의미합니다.
6) SetRange Range("A2:" & ThisWorkbook.Sheets(1).Range("C2").End(xlDown).Address)
SetRange는 정렬을 할 전체 영역을 설정합니다. 데이터 끝을 알아내기 위한 구문을 이용하여 오른쪽 가장 아랫부분의 셀 주소를 구하고 이를 문자열 연산으로 연결하여 Range를 설정합니다.
예제에서 위 구문은 결국 .SetRange Range("A2:C6")가 됩니다.
여기서 주의할 점은 데이터 끝을 알아내는 End() 문을 사용할 때 그 중간에 빈 공백의 셀이 없어야 한다는 점입니다.
이럴 때는 빈 공백이 없는 키(Key) 열을 이용하여 End(xlDown)으로 행 수를 구한 다음, .Offset(0,2).Address와 같은 식으로 구하는 것이 더 안전합니다. 키(Key)로 사용되는 열은 일반적으로 공백이 없습니다.
아래는 키열에 End()문을 이용하여 데이터 끝을 구하는 동일하지만 다른 코드입니다.
ThisWorkbook.Sheets(1).Range("A2").End(xlDown).Offset(0,2).Address)
7) .Header = xlNo
정렬의 전체 영역에서 첫 줄이 항목 이름을 포함한 헤더(Header)인지를 설정하는 부분입니다.
예제에서는 첫 번째 행이 헤더(Header)가 됩니다.
정렬한 전체 영역에서 이미 이를 제외하고 두 번째 행부터 설정하였으므로 헤더가 없다고 (xlNo) 설정합니다.
8) .MatchCase = False
MatchCase를 True로 설정하면 대/소문자가 구분되어 정렬되고 False로 설정하면 대/소문자에 상관없이 정렬됩니다.
9) .Orientation = xlTopToBottom
정렬의 방향입니다. 위에서 아래의 순서로 정렬합니다.
10) .Apply
설정을 다 했다면 Apply 구문으로 정렬을 시행합니다.
키(Key) 영역과 전체 정렬 영역을 지정하고 정렬 방식을 지정하면 일반적인 데이터를 정렬하는 것에 큰 문제가 없습니다.
나머지 항목들은 부가적인 항목들로써 일반적으로 같은 값이나 기본을 그냥 사용하면 됩니다.
'Engineering (+investing insight) > 3. 컴퓨터 시스템' 카테고리의 다른 글
| [엑셀VBA] Type (사용자 정의 자료형) 사용하기 (0) | 2024.02.29 |
|---|---|
| [엑셀VBA] 문자열 연산하고 토큰 처리하기 (0) | 2024.02.29 |
| [엑셀VBA] 꾸미기 (Decoration) (0) | 2024.02.29 |
| [엑셀 VBA] 오류 처리 (On Error)하기 (0) | 2024.02.29 |
| [엑셀VBA] 타이머(Timer) 사용하기 (0) | 2024.02.27 |
