Ordenar los cumpleaños

A continuación veremos un programa en Excel VBA que ordena los cumpleaños a los primeros meses y a los segundos días (así que ignoramos los años). Queremos el cumpleaños con el número de mes más bajo en la primera posición. Si hay cumpleaños con números de mes iguales, queremos el cumpleaños con el número de día más bajo primero. ¿Estáis listos?

Situación:

Nota: Las fechas están en formato de EE.UU. Meses primero, días segundo. Este tipo de formato depende de la configuración regional de Windows.

1. Primero, declaramos ocho variables. Una variable de fecha que llamamos tempDate, una variable de cadena que llamamos tempName. Las otras seis variables son variables enteras con nombres como monthToCheck, dayToCheck, monthNext, dayNext, i y j.

Dim tempDate As Date, tempName As String Dim mesComprobar como entero, díaComprobar como entero, mesSiguiente como entero, díaSiguiente como entero, i como entero, j como entero

2. Empezamos dos para los próximos bucles.

Para i = 2 a 13 Para j = i + 1 a 13

Ejemplo: para i = 2, j = 3, 4, … …12 y 13 están comprobados.

3. Inicializamos cuatro variables enteras. Usamos la función de mes para obtener el mes de una fecha y la función de día para obtener el día de una fecha.

mesToCheck = mes(Celdas(i, 2).Valor) dayToCheck = día(Celdas(i, 2).Valor) mesSiguiente = mes(Celdas(j, 2).Valor) díaSiguiente = día(Células(j, 2).Valor)

Por ejemplo: al principio, para i = 2; la fecha de Bregje, y j = i + 1 = 2 + 1 = 3; se elegirá la fecha de Niels.

4. Para ordenar las fechas correctamente, comparamos la primera fecha (monthToCheck y dayToCheck) con la siguiente (monthNext y dayNext). Si la siguiente fecha es «más baja», intercambiamos las fechas y los nombres. Añadimos el siguiente enunciado de If Then.

Si (monthNext < monthToCheck) o (monthNext = monthToCheck y dayNext < dayToCheck) entonces Finalizar si

Si la afirmación anterior es cierta, intercambiamos las fechas y los nombres.

Por ejemplo: para i = 2 y j = 3, se comprueba la fecha de Bregje y Niels. Mes siguiente = 6, mes a comprobar = 2. La afirmación anterior no es cierta ya que monthNext es superior a monthToCheck. Excel VBA incrementa j en 1 y repite las líneas de código para i = 2 y j = 4. Puedes ver fácilmente que Joost (j = 4) tiene un número de mes más alto que Bregje, así que vamos al siguiente. Obtenemos el mismo resultado para j = 5 y j = 6. Cuando llegamos a j = 7, tenemos las siguientes variables: mesSiguiente = 2 y díaSiguiente = 9. MonthToCheck = 2 y dayToCheck = 12. Ahora la afirmación anterior es verdadera ya que monthNext = monthToCheck y dayNext (9) es menor que dayToCheck (12).

5. Intercambiamos las fechas. Guardamos temporalmente una fecha en tempDate, para que el Excel VBA pueda intercambiar las fechas correctamente. Añade las siguientes líneas de código en la sentencia If.

‘intercambiar fechas tempDate = Células(i, 2).Valor Células(i, 2).Valor = Células(j, 2).Valor Células(j, 2).Valor = tempDate

6. Hacemos lo mismo con los nombres. Añade las siguientes líneas de código en la declaración «Si».

«Intercambio de nombres»… tempName = Cells(i, 1).Value Células(i, 1).Valor = Células(j, 1).Valor Células(j, 1).Valor = tempName

7. Cerramos el segundo bucle For Next (Fuera de la declaración If).

Siguiente j

Para i = 2 y j = 7, Excel VBA intercambió las fechas y los nombres. Eso significa que tenemos a Richard en la primera posición y a Bregje en la posición 7. Eso también significa que obtenemos un nuevo monthToCheck y dayToCheck al comienzo de nuestra siguiente iteración (para i = 2 y j = 8). Ahora compararemos a Richard con Dineke (j = 8). Se puede ver fácilmente que no hay necesidad de reemplazar esas fechas y nombres porque Richard tiene una fecha «más baja». De hecho, no hay necesidad de reemplazar a Richard (i = 2) con Jan (j = 9), Wendy (j = 10), Jeroen (j = 11), John ( j= 12) y Debby (j = 13). Eso es porque Richard tiene la fecha «más baja». De esta manera el Excel VBA obtendrá (para i = 2) la fecha ‘más baja’ en la primera posición. Para obtener la segunda fecha «más baja» en la segunda posición, el Excel VBA repite exactamente los mismos pasos para i = 3. Para obtener la tercera fecha «más baja» en la tercera posición, Excel VBA repite exactamente los mismos pasos para i = 4, etc.

8. Cierre el primer bucle For Next (Fuera de la declaración If).

Siguiente…

9. Pruebe su programa.

Resultado:

Deja un comentario