VBA의 배열 정렬

3519 단어 VBA
Excel에서 수조 정렬에 직접적인 방법이나 함수를 제공하지 않기 때문에 VBA를 사용하여 수조 정렬을 하려면 우리가 데이터 구조와 알고리즘 과정에서 배운 정렬 알고리즘을 사용해야 한다.
여기가 옮겨졌어요Using a Visual Basic Macro to Sort Arrays in Microsoft Excel 에서 제시한 VBA를 사용하여 수조 정렬을 하는 두 가지 방법은 각각 정렬 알고리즘을 사용한다. 정렬 선택과 거품 정렬이다.

Method 1: Selection Sort

      Function SelectionSort(TempArray As Variant)

          Dim MaxVal As Variant

          Dim MaxIndex As Integer

          Dim i, j As Integer



          ' Step through the elements in the array starting with the

          ' last element in the array.

          For i = UBound(TempArray) To 1 Step -1



              ' Set MaxVal to the element in the array and save the

              ' index of this element as MaxIndex.

              MaxVal = TempArray(i)

              MaxIndex = i



              ' Loop through the remaining elements to see if any is

              ' larger than MaxVal. If it is then set this element

              ' to be the new MaxVal.

              For j = 1 To i

                  If TempArray(j) > MaxVal Then

                      MaxVal = TempArray(j)

                      MaxIndex = j

                  End If

              Next j



              ' If the index of the largest element is not i, then

              ' exchange this element with element i.

              If MaxIndex < i Then

                  TempArray(MaxIndex) = TempArray(i)

                  TempArray(i) = MaxVal

              End If

          Next i



      End Function



      Sub SelectionSortMyArray()

          Dim TheArray As Variant



          ' Create the array.

          TheArray = Array("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten")



          ' Sort the Array and display the values in order.

          SelectionSort TheArray

          For i = 1 To UBound(TheArray)

              MsgBox TheArray(i)

          Next i



      End Sub


Method 2: Bubble Sort

      Function BubbleSort(TempArray As Variant)

          Dim Temp As Variant

          Dim i As Integer

          Dim NoExchanges As Integer



          ' Loop until no more "exchanges" are made.

          Do

              NoExchanges = True



              ' Loop through each element in the array.

              For i = 1 To UBound(TempArray) - 1



                  ' If the element is greater than the element

                  ' following it, exchange the two elements.

                  If TempArray(i) > TempArray(i + 1) Then

                      NoExchanges = False

                      Temp = TempArray(i)

                      TempArray(i) = TempArray(i + 1)

                      TempArray(i + 1) = Temp

                  End If

              Next i

          Loop While Not (NoExchanges)



      End Function



      Sub BubbleSortMyArray()

          Dim TheArray As Variant



          ' Create the array.

          TheArray = Array(15, 8, 11, 7, 33, 4, 46, 19, 20, 27, 43, 25, 36)



          ' Sort the Array and display the values in order.

          BubbleSort TheArray

          For i = 1 To UBound(TheArray)

              MsgBox TheArray(i)

          Next i

      End Sub

좋은 웹페이지 즐겨찾기