XL2000: Cómo usar una macro de Visual Basic para ordenar matrices en Excel

Seleccione idioma Seleccione idioma
Id. de artículo: 213818 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En Microsoft Excel 2000, no hay ningún método directo para ordenar una matriz de valores con un Microsoft Visual Basic para aplicaciones macro o procedimiento. Este artículo describen dos diferentes algoritmos que se pueden utilizar para ordenar matrices: el Orden de selección y la Ordenación de burbuja .

Más información

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita, incluyendo, pero sin limitarse a, las garantías implícitas de comerciabilidad e idoneidad para un propósito determinado. En este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y las herramientas utilizadas para crear y depurar procedimientos. Los profesionales de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos a necesidades específicas.
Si tiene poca experiencia en programación, desea póngase en contacto con un Microsoft Certified Partner o servicios de consultoría de Microsoft. Para obtener más información, visite estos sitios Web de Microsoft:

Microsoft certificado Partners - https://partner.microsoft.com/global/30000104

Servicios de asesoramiento de Microsoft - http://support.microsoft.com/gp/advisoryservice

Para obtener más información acerca de las opciones de soporte técnico que están disponibles y cómo ponerse en contacto con Microsoft, visite el siguiente sitio Web de Microsoft: http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

Método 1: Orden de selección

Aunque es una orden de selección entre más fácil ordena programa, suele ejecutarse más lentamente que la ordenación de burbuja en las matrices grandes de datos.

Para realizar una selección de una matriz con entre 1 hasta n número de elementos, busque el elemento mayor de 1 a n. Si no está n de elemento, el elemento más grande con elemento n de exchange. A continuación, busque el elemento mayor de 1 a n-1 y, si no es elemento n-1, el elemento más grande con elemento n-1 de exchange. A continuación, busque el elemento mayor de 1 a n-2 y, si no es elemento n-2, el elemento más grande con elemento n-2 de exchange y así sucesivamente.

El siguiente es un ejemplo de una selección con una matriz de tipo Variant de Visual Basic.
  1. Escriba o pegue lo siguiente en una hoja de módulo: 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. Para ejecutar la macro, haga clic en el menú Herramientas , elija macro y, a continuación, haga clic en macros .
  3. Seleccione la macro SelectionSortMyArray y, a continuación, haga clic en Ejecutar .

Método 2: Ordenación de burbuja

Una ordenación de burbuja es más difícil programar que la ordenación de selección, pero suele ejecutar con mayor rapidez y eficacia con matrices más grandes de datos.

Para realizar una ordenación de burbuja, 1 para los elementos de n-1 de la matriz donde comparar cada elemento con uno después de evaluar (en otras palabras, el elemento 1 se compara con el elemento 2, elemento 2 se compara con el elemento 3 etc.). Si un elemento es mayor que el elemento detrás de él, se intercambian los dos elementos. Continúe este proceso hasta que no hay ningún intercambios más de elementos. El siguiente es un ejemplo de una burbuja con una matriz de tipo Variant de Visual Basic.
  1. Escriba o pegue el código siguiente en una hoja de módulo: 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. Para ejecutar la macro, haga clic en el menú Herramientas , elija macro y, a continuación, haga clic en macros .
  3. Seleccione la macro SelectionSortMyArray y, a continuación, haga clic en Ejecutar .
Nota : ambos de estos ejemplos ordenan en orden ascendente. Para realizar una orden de selección en orden descendente, cambie ">"a"<" en la siguiente línea de lafunción SelectionSort :
If TempArray(j) > MaxVal Then
				
para realizar una ordenación de burbuja en orden descendente, cambiar ">" para una "<" en la siguiente línea de lafunción BubbleSort :
If TempArray(i) > TempArray(i + 1) Then
				

Propiedades

Id. de artículo: 213818 - Última revisión: jueves, 23 de noviembre de 2006 - Versión: 3.5
La información de este artículo se refiere a:
  • Microsoft Excel 2000 Standard Edition
Palabras clave: 
kbmt kbdtacode kbhowto kbinfo kbprogramming KB213818 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 213818

Enviar comentarios

 

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