엑셀 SortArray 함수 사용법 및 전체 명령문 :: VBA 배열 정렬 함수

배열을 오름차순/내림차순으로 정렬하는 SortArray 함수의 사용법 및 전체 명령문 동작원리를 알아봅니다.

홈페이지 » 엑셀 SortArray 함수 사용법 :: VBA 배열 정렬 함수

배열을 정렬하는 VBA 명령문 :: SortArray 함수

구문

SortArray ( 배열, [정렬방향] )

설명

엑셀 SortArray 함수는 배열을 오름차순 또는 내림차순으로 정렬하는 함수입니다. SortArray 함수를 사용할 시, 함수의 세번째 인수인 NumericSort 인수 설정을 주의해야 합니다. (기본값: 'True')

예를들어 {1, 3, 2, 11} 의 배열을 각 숫자와 텍스트 형식으로 정렬하면 아래와 같습니다.

  1. '숫자 형식'으로 정렬 : {1, 2, 3, 11}   '// NumericSort가 True일 경우 숫자의 크기를 기준으로 정렬됩니다.
  2. '텍스트 형식'으로 정렬 : {1, 11, 2, 3}   '// 숫자만 입력된 배열을 텍스트 형식으로 정렬할 경우 옳지않은 순서로 정렬됩니다.

또한 NumericFileter를 True로 입력하더라도, 배열에 '텍스트'가 포함된 값이 하나라도 있으면 자동으로 False처리가 되니 주의합니다.

  1. '숫자형식'으로 정렬 가능 : {1, 11, 3, 12, 2}  =>  {1, 2, 3, 11, 12}
  2. '텍스트형식'으로 강제 정렬 : {1, 11, 3월, 12, 2}  =>  {1, 11, 12, 2, 3월'// 중간에 텍스트가 포함되어 '숫자형식'으로 정렬 불가능
인수 설명
인수데이터형식설명기본값
vaArrVariant정렬할 배열입니다.
SortOrderxlSortOrder정렬방향입니다. (오름차순 또는 내림차순)xlAscending (오름차순)
NumericSortBooleanTrue일경우 숫자형식(크기)으로 정렬합니다. 단 배열에 텍스트값이 하나라도 있을경우 강제 False 처리 됩니다.True
예제파일 다운로드

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
명령문 동작원리 단계별 알아보기

SortArray 함수는 배열의 '첫번째' 값을 시작으로 해당 값을 '고정'한 뒤, 이후 값들을 하나씩 비교하여 오름차순 또는 내림차순으로 정렬합니다.

즉, 첫번째 값을 고정한 채로 첫번째 싸이클을 돌게되면 해당 값은 '최소값' 또는 '최대값'이 놓이게 됩니다. 쉬운 이해를 위해 {5, 1, 7, 9, 3} 배열을 오름차순으로 정렬하는 것을 예제로 알아보겠습니다.

  1. 첫번째 값을 고정합니다. 두번째 값부터 하나씩 비교하여 가장 작은값이 첫번째로 오도록 정렬합니다.
    = {5, 1, 7, 9, 3}   '// 첫번째 값을 고정한 뒤, 두번째 값부터 하나씩 비교합니다. 1이 5보다 작으므로 1을 앞으로 보냅니다.
    = {1, 5, 7, 9, 3}
    = {1, 5, 7, 9, 3}  '// 1을 앞으로 보낸 뒤, 이제 세번째값과 비교합니다. 1이 7보다 작으므로 넘어갑니다.
    = {1, 5, 7, 9 3} .. '// 첫번째값과 네번째값을 비교합니다.

    1 배열 정렬 첫번째값 고정
    첫번째 값을 고정한 뒤, 두번째 값부터 하나씩 비교하여 정렬합니다.
  2. 첫번째 값이 확정됩니다. 이제 두번째 값을 고정한 뒤, 이후 값을 하나씩 비교합니다.
    ={1, 5, 7, 9, 3}  '// 두번째값과 세번째값을 비교합니다. 5가 7보다 작으므로 넘어갑니다.
    ={1, 5, 7, 9, 3}
    ={1, 3, 7, 9, 5} '// 뒤에 있는 3이 5보다 작으므로 3을 앞으로 이동합니다.

    2 첫번째값 확정한 뒤 두번째값 배열 정렬
    첫번째 값이 확정되었으면, 두번째 값을 고정한 뒤 같은 작업을 반복합니다.
  3. 이제 첫번째와 두번째값이 확정되었습니다. 세번째 값을 고정한 뒤 같은 작업을 반복합니다.

    3 세번째부터 배열 정렬
    세번째 값을 고정한 뒤 같은 작업을 반복합니다.
  4. 오름차순으로 정렬된 배열이 반환됩니다.
    = {1, 3, 5, 7, 9}

링크] MS 홈페이지 VBA 배열 사용법 상세설명 페이지 (영문)

현재 페이지 댓글알림 신청
알림 설정
guest
0 Comments
Inline Feedbacks
View all comments
0
여러분의 생각을 댓글로 남겨주세요.x