Aleatoriamente ordenar los datos en Excel VBA
A continuación vamos a ver un programa en Excel VBA que ordena al azar de datos (en este ejemplo ordena al azar nombres).
Situación:
-
En primer lugar, declarar cuatro variables. Una variable de tipo String que llamamos TempString, una variable de tipo entero que llamamos TempInteger, una variable de tipo entero que llamamos i, y una variable de tipo entero que llamamos j.
Dim tempString As String, tempInteger As Integer, i As Integer, j As Integer
-
Escribimos 5 números aleatorios a la columna B (uno para cada nombre). Usamos la función de hoja de RANDBETWEEN para esto.
For i = 1 To 5 Cells(i, 2).Value = WorksheetFunction.RandBetween(0, 1000) Next i
Como resultado hasta el momento:
Vamos a utilizar los números al lado de cada nombre para ordenar los nombres. El nombre con el número más bajo en primer lugar, el nombre con el número más bajo segundos, segundo, etc.
-
Comenzamos un bucle doble.
For i = 1 To 5 For j = i + 1 To 5
-
Añadir la siguiente línea de código:
If Cells(j, 2).Value < Cells(i, 2).Value Then
Ejemplo: para i = 1 y j = 2, Wendy y Richard se comparan. Debido a que Richard tiene un número más bajo, que intercambiar Wendy y Richard. Richard está en la primera posición ahora. Para i = 1 y j = 3, Richard y Joost se comparan.
Joost tiene un número más alto por lo que no pasa nada. De esta manera, Excel VBA obtiene el nombre con el número más bajo en la primera posición. Para i = 2, Excel VBA obtiene el nombre con el número de la segunda más baja en la segunda posición, etc.
-
Si es verdad, que
enlace: / VBA-ejemplos de intercambio swap de valores []
los nombres.
tempString = Cells(i, 1).Value Cells(i, 1).Value = Cells(j, 1).Value Cells(j, 1).Value = tempString
-
Y Intercambiamos los números.
tempInteger = Cells(i, 2).Value Cells(i, 2).Value = Cells(j, 2).Value Cells(j, 2).Value = tempInteger
-
No se olvide de cerrar la instrucción if.
End If
-
No se olvide de cerrar los dos bucles.
Next j Next i
Prueba 9. programa.
Resultado:
Nota: puede agregar una línea que borra los números de la columna B. Es aún más agradable para colocar los números de cada nombre en una matriz, por lo que no hay números se colocan en la hoja de trabajo. Sin embargo, para fines ilustrativos hemos elegido para colocar los valores en la hoja.