XL2000: 如何使用 Visual Basic 巨集來排序在 Excel 中的陣列

文章翻譯 文章翻譯
文章編號: 213818 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

在 Microsoft Excel 2000 中沒有直接方法來進行排序的值與一個 Microsoft Visual Basic 應用程式的巨集或程序的陣列。 本文將告訴您可用來排序陣列兩個不同的演算法: 選取範圍排序] 和 [泡泡排序

其他相關資訊

Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證,包括但不是限於適售性以及適合某特定用途之默示擔保責任。本文假設您已熟悉我們所示範的程式設計語言,以及用來建立和偵錯程序的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您的特定需求。
如果您有限制程式設計經驗,您可以連絡 Microsoft 認證合作夥伴或 Microsoft 諮詢服務。如需詳細資訊請造訪下列 Microsoft] 網站:

Microsoft 認證合作夥伴-https://partner.microsoft.com/global/30000104

Microsoft 摘要報告服務-http://support.microsoft.com/gp/advisoryservice

如需有關可用的支援選項,以及有關如何連絡 Microsoft 的詳細資訊,請造訪下列 Microsoft 網站: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

方法 1: 選取範圍排序

雖然選取範圍排序之間更容易的排序程式但它往往比泡泡排序更慢在大型陣列資料上執行。

如果要執行一個選取範圍的 1 到 n 個項目之間具有陣列,找出最大元素從 1 到 n]。如果這不是項目 n,交換項目 n 具有最大的項目。然後,找出最大元素從 1 到 n-1 並如果這不是項目 n-1,交換具有項目 n-1 最大的項目。接下來,找出最大元素從 1 到 n-2 等等,如果這不是項目 n-2,交換項目 n-2 具有最大的項目。

下列是使用 Visual Basic Variant 型別陣列的選取項目排序的範例。
  1. 輸入或貼上下列在模組工作表中: Option Base 1
    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(15, 8, 11, 7, 33, 4, 46, 19, 20, 27, 43, 25, 36)
    
        ' Sort the Array and display the values in order.
        SelectionSort TheArray
        For i = 1 To UBound(TheArray)
            MsgBox TheArray(i)
        Next i
    
    End Sub
    					
  2. 來執行巨集,請依序按一下 [工具] 功能表,指向 [巨集],然後按一下 [巨集
  3. 選取 SelectionSortMyArray] 巨集,然後按一下 [執行]。

方法 2: 泡泡排序

泡泡排序更難比 [選取範圍] 主要設計程式,但它傾向以大型陣列資料執行速度更快、 更有效率。

若要進行泡泡排序評估 1 至 n-1 中您用來比較每個項目與後一個陣列的項目 (亦即 1 項目相較於項目 2,元素 2 相較於項目 3,等等)。如果項目大於項目後,會交換那些兩個項目。請繼續此程序,直到有沒有更多的交換的項目。下列是使用 Visual Basic Variant 型別陣列的泡泡排序的範例。
  1. 輸入或貼上下列程式碼在模組工作表中: Option Base 1
    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
    					
  2. 來執行巨集,請依序按一下 [工具] 功能表,指向 [巨集],然後按一下 [巨集
  3. 選取 SelectionSortMyArray] 巨集,然後按一下 [執行]。
注意: 兩者皆這些範例以遞增順序排序。若要以遞減順序執行選取範圍排序,變更">"到"<"下列行的SelectionSort 函式:
If TempArray(j) > MaxVal Then
				
執行泡泡排序以遞減順序,變更">"至一個"<"下列行的BubbleSort 函式:
If TempArray(i) > TempArray(i + 1) Then
				

屬性

文章編號: 213818 - 上次校閱: 2006年11月23日 - 版次: 3.5
這篇文章中的資訊適用於:
  • Microsoft Excel 2000 Standard Edition
關鍵字:?
kbmt kbdtacode kbhowto kbinfo kbprogramming KB213818 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:213818
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com