-
VBA/파워포인트/사진정리 - 1.1.1. 배열 정렬코딩/vba 2024. 1. 12. 15:54728x90
배열 정렬용 유틸리티 SortArray()
이 유틸리티는 배열을 인수로 받아 버블정렬방식으로 정렬한 후 배열을 다시 반환하는 유틸리티다. 처음에 사진삽입만 처리할 때는 1차원 배열만 사용하므로 코드가 간단했는데 사진정렬을 하면서 다차원배열을 사용하는 바람에 코드가 복잡해져 버렸다.
다차원 배열 정렬용 코드
인수로는 배열, 정렬용 차원의 번호, 차원 수를 입력받는다. 정렬용 차원을 기준으로 배열을 정렬하는데 이 코드는 엑셀처럼 여러 개의 키를 받지 않고 단 하나의 필드만 키로 사용한다. 배열은 항상 참조로만 전달되어야 하므로 ByRef를 사용하고 나머지들은 ByVal로 값을 받는다. 배열은 Variant를 사용해야 하고 나머지는 정수로 받는다.
1차원과 다차원을 구분해서 배열의 크기를 계산하기 위한 변수에 값을 전달한다.
차원에 따라 현재값과 다음값을 변수에 저장한 후, 서로의 값을 비교해서 순서를 바꾼다. 이후 k 변수를 이용해서 키차원 외의 모든 값의 순서를 바꾼다.
버블배열은 첫번째 자리의 값과 오른쪽 자리를 비교해서 순서를 바꾸고, 다시 그 다음번 자리의 값과 비교해 바꾸는 식으로 마지막 자리까지 반복하고, 다시 두번째 자리의 값과 그 오른쪽 자리를 비교하는 순서로 모든 자리를 반복한다.
728x90Sub SortArray(ByRef arr As Variant, ByVal keyDimension As Integer, ByVal dimensions As Integer) ' Bubble sort 방식으로 배열 정렬 Dim low As Integer, high As Integer If dimensions = 1 Then low = LBound(arr) high = UBound(arr) Else low = LBound(arr, keyDimension) high = UBound(arr, keyDimension) End If Dim i As Integer, j As Integer, k As Integer Dim currentValue As Variant, nextValue As Variant Dim temp For i = low To high - 1 For j = i + 1 To high If dimensions = 1 Then currentValue = arr(i) nextValue = arr(j) Else currentValue = arr(keyDimension - 1, i) nextValue = arr(keyDimension - 1, j) End If If currentValue > nextValue Then ' Swap temp = currentValue If dimensions = 1 Then arr(i) = nextValue arr(j) = currentValue Else arr(keyDimension - 1, i) = nextValue arr(keyDimension - 1, j) = currentValue For k = 1 To dimensions If k <> keyDimension Then temp = arr(k - 1, i) arr(k - 1, i) = arr(k - 1, j) arr(k - 1, j) = temp End If Next k End If End If Next j Next i End Sub
1차원 배열 정렬용 코드
Sub SortArray(ByRef arr As Variant) ' Bubble sort 방식으로 배열 정렬 Dim i As Integer, j As Integer Dim temp For i = LBound(arr) To UBound(arr) - 1 For j = i + 1 To UBound(arr) If arr(i) > arr(j) Then ' Swap temp = arr(i) arr(i) = arr(j) arr(j) = temp End If Next j Next i End Sub
728x90'코딩 > vba' 카테고리의 다른 글
VBA/파워포인트/사진정리 - 2. 사진 정열 (0) 2024.01.13 VBA/파워포인트/사진정리 - 1.2. 사진 삽입 서브 프로시저 (0) 2024.01.13 VBA/파워포인트/사진정리 - 1.1. 파일명 배열 (0) 2024.01.12 VBA/파워포인트/사진정리 - 1. 사진 삽입 (1) 2024.01.12 VBA/배열을 함수로부터 전달받기 (0) 2024.01.11