XL2000: 如何在 Excel 中使用 vba 宏以排序数组

文章翻译 文章翻译
文章编号: 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 标准版
关键字:?
kbmt kbdtacode kbhowto kbinfo kbprogramming KB213818 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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