A continuación vamos a ver un programa en Excel VBA que ordena los números.

Situación:

Sort Numbers Example

Coloque un botón de comando en la hoja de trabajo y añadir las líneas de código siguientes:

  1. En primer lugar, declaramos tres variables de tipo entero y un objeto Range.

Dim i As Integer, j As Integer, temp As Integer, rng As Range
  1. inicializar el generador de números aleatorios objeto Range con los números en la columna A. Usamos el enlace: / VBA-ejemplos-CurrentRegion [CurrentRegion] propiedad por éste.

CurrentRegion es útil cuando no conocemos los límites exactos de un rango de antemano (queremos que este programa de trabajo para 9 números, sino también para los 90 números).

Set rng = Range("A1").CurrentRegion
  1. Empezamos dos bucles for Next.

For i = 1 To rng.Count

For j = i + 1 To rng.Count

Explicación: rng.Count es igual a 9, por lo que las dos primeras líneas de código se reducen a para i = 1 a 9 y para j = i + 1 a 9. Para i = 1, j = 2, 3, …​, 8 y 9 se comprueban.

  1. Para ordenar los números correctamente, se compara el primer número con el siguiente número. Si el siguiente número es menor, intercambiamos los números. Agregue la siguiente instrucción If Then.

If rng.Cells(j) < rng.Cells(i) Then

End If

Si la afirmación anterior es cierto, intercambiamos los números.

Por ejemplo: para i = 1 y j = 2, los números 2 y 10 se están comparando. La afirmación anterior no es cierto. Por lo tanto, no hay necesidad de intercambiar los números. Excel VBA incrementos j por 1 y repite las líneas de código para i = 1 y j = 3. Se puede ver fácilmente que 5 es mayor que 2, por lo que todavía hay necesidad de cambiar los números. Se obtiene el mismo resultado para j = 4, j = 5 y j = 6. Al llegar a j = 7, la afirmación anterior es cierto, ya que 1 es menor que 2.

  1. enlace: / VBA-ejemplos de intercambio en valores de intercambio [] los números. Almacenamos temporalmente un número a la temperatura, por lo que Excel VBA puede intercambiar los números correctamente. Añadir las siguientes líneas de código en la instrucción If.

'swap numbers

temp = rng.Cells(i)

rng.Cells(i) = rng.Cells(j)

rng.Cells(j) = temp
  1. cerrar el segundo bucle For Next (Fuera de la sentencia if).

Next j

Para i = 1 y j = 7, Excel VBA intercambiado los números. Eso significa que obtenemos 1 en la primera posición y 2 en la posición 7. Ahora que tenemos 1 en la primera posición, vamos a comparar este valor con 5 (para j = 8) y 4 (para j = 9). No hay necesidad de cambiar los números (1 es el número más pequeño).

De esta manera Excel VBA obtiene (para i = 1) el número más pequeño en la primera posición. Para obtener el número de segundos más pequeño en la segunda posición, Excel VBA repite los mismos pasos exactos para i = 2. Para obtener el tercer número más pequeño en la tercera posición, Excel VBA repite los mismos pasos exactos para i = 3, etc.

  1. Cierre el primer bucle For Next (Fuera de la sentencia if).

Next i
  1. Prueba de su programa.

Resultado:

Sort Numbers in Excel VBA