/ / Ordenar cumpleaños en Excel VBA

Ordenar cumpleaños en Excel VBA

A continuación veremos un programa en Excel VBA ese ordena los cumpleaños a meses primero y días segundo (por lo que ignoramosañ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ás listo?

Situación:

Ejemplo de ordenar cumpleaños

Nota: Las fechas están en formato estadounidense. 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 los nombres monthToCheck, dayToCheck, monthNext, dayNext, i y j.

Dim tempDate As Date, tempName As String
Dim monthToCheck As Integer, dayToCheck As Integer, monthNext As Integer, dayNext As Integer, i As Integer, j As Integer

2. Comenzamos dos bucles For Next.

For i = 2 To 13
    For j = i + 1 To 13

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

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

monthToCheck = month(Cells(i, 2).Value)
dayToCheck = day(Cells(i, 2).Value)

monthNext = month(Cells(j, 2).Value)
dayNext = day(Cells(j, 2).Value)

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

4. Para ordenar las fechas correctamente, comparamos la primera fecha (monthToCheck y dayToCheck) con la siguiente fecha (monthNext y dayNext). Si la próxima fecha es "inferior", intercambiamos las fechas y los nombres. Agregue la siguiente instrucción If Then.

If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then

End If

Si la declaración anterior es verdadera, intercambiamos las fechas y los nombres.

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

5. Cambiamos las fechas. Almacenamos temporalmente una fecha a tempDate, para que Excel VBA pueda intercambiar las fechas correctamente. Agregue las siguientes líneas de código en la instrucción If.

"swap dates
tempDate = Cells(i, 2).Value
Cells(i, 2).Value = Cells(j, 2).Value
Cells(j, 2).Value = tempDate

6. Hacemos lo mismo con los nombres. Agregue las siguientes líneas de código en la instrucción If.

"swap names
tempName = Cells(i, 1).Value
Cells(i, 1).Value = Cells(j, 1).Value
Cells(j, 1).Value = tempName

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

Next j

Para i = 2 y j = 7, Excel VBA intercambió las fechasy nombres. Eso significa que tenemos a Richard en la primera posición y Bregje en la posición 7. Eso también significa que obtenemos un nuevo monthToCheck y dayToCheck al comienzo de nuestra próxima iteración (para i = 2 y j = 8). Ahora compararemos a Richard con Dineke (j = 8). 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 es necesario reemplazar a Richard (i = 2) por 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, 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, 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 instrucción If).

Next i

9. Pon a prueba tu programa.

Resultado:

Ordenar cumpleaños en Excel VBA

Lea también: