메뉴

SortArray

Function

배열을 오름차순 또는 내림차순으로 정렬하는 VBA 사용자 지정 함수입니다.

SortArray 코드 미리보기
구문 = SortArray ( 배열, [정렬방향], [숫자기준정렬] )
인수구분 형식 설명
vaArr 필수 Variant
정렬할 배열입니다.
SortOrder 선택 XlSortOrder
정렬 방향입니다. 기본값은 오름차순입니다.
오름차순 또는 내림차순 중에서 선택합니다.
NumericSort 선택 Boolean
True 일 경우 숫자 형식(크기)으로 정렬합니다. 기본값은 True 입니다.
단, 배열에 텍스트 값이 하나라도 있을 경우 강제로 False 처리됩니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

활용 예제

숫자 배열을 크기 순으로 오름차순 정렬
Sub 숫자정렬()
Dim vaArr As Variant
vaArr = Array(10, 2, 33, 4)
vaArr = SortArray(vaArr)
'// {2, 4, 10, 33} 으로 정렬됩니다.
End Sub
시트 범위의 값을 내림차순으로 정렬해 다시 쓰기
Sub 범위정렬()
Dim vaArr As Variant
vaArr = Application.Transpose(Range("B2:B10").Value)
vaArr = SortArray(vaArr, xlDescending)
Range("D2").Resize(UBound(vaArr)).Value = Application.Transpose(vaArr)
End Sub

안내사항

세 번째 인수인 NumericSort 설정에 주의합니다 — 숫자만 담긴 배열을 텍스트 형식으로 정렬하면 {1, 11, 2, 3} 처럼 크기 순서와 다르게 정렬됩니다.
NumericSort 를 True 로 입력하더라도 배열에 텍스트가 하나라도 포함되어 있으면 자동으로 False 처리됩니다.
2차원 배열을 정렬해야 할 경우 Sort2DArray 명령문을 사용합니다.
댓글 3
5 (3개 평가)
cruis****
cruis**** 2020.12.19 22:01
잘 응용해보겠습니다. 고맙습니다
현우
현우 2021.09.06 15:57
이 페이지에있는 sortarray 전체 코드를 복사해서 사용하시면 오류가 납니다. 반드시 예제파일을 다운로드하셔서, Alt+ f11 버튼을 통해 들어가신 후 거기있는 코드를 복사 붙여넣기하셔야 작동이 됩니다. 또한, 3번째 인자를 1로 설정하여 오름차순을 하게 되면 오류가 나니 이 함수는 내림차순 용도로만 사용하는 것이 좋겠습니다.
강민준🤗
강민준🤗 2024.08.11 13:00
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료