Ordenar cumplen años en Excel VBA
A continuación vamos a ver un programa en Excel VBA que ordena a los cumpleaños y los días primeros meses segundo (por lo ignoramos años). Queremos que el cumpleaños con el número más bajo mes en la primera posición. Si hay cumpleaños con un número igual mes, queremos que el cumpleaños con el número del día primero el más bajo. ¿Estás listo? Situación:
Nota: Las fechas están en formato de Estados Unidos. Meses primera, segunda Días. Este tipo de formato depende de las ventanas de la configuración regional.
-
En primer lugar, declaramos ocho variables. Una fecha variable que llamamos tempDate, una variable de cadena que llamamos tempName. Los otros seis variables son variables enteras con 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
-
Empezamos 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 marcadas.
-
inicializamos cuatro variables enteras. Utilizamos la función mes para obtener el mes de la fecha y la función de los días para obtener el día de la 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: en la salida, para i = 2; la fecha de Bregje, y j = i + 1 = 2 + 1 = 3; la fecha de Niels será elegido.
-
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 nombres. Agregue la siguiente instrucción If Then.
If (monthNext < monthToCheck) Or (monthNext = monthToCheck And dayNext < dayToCheck) Then End If
Si la afirmación anterior es cierto, intercambiamos las fechas y nombres.
Por ejemplo: para i = 2 y j = 3, la fecha de Bregje y Niels se comprueban. MonthNext = 6, monthToCheck = 2. La declaración anterior no es cierto ya que monthNext es mayor que monthToCheck. Excel VBA incrementos j en 1 y repite las líneas de código para i = 2 y j = 4. Se puede ver fácilmente que Joost (j = 4) tiene un número más alto que el mes Bregje, por lo que vamos a la siguiente. Se obtiene el mismo resultado para j = 5 y j = 6. Al llegar a j = 7, tenemos las siguientes variables: monthNext = 2 y = 9. dayNext MonthToCheck = 2 y dayToCheck = 12. Ahora la afirmación anterior es verdad desde monthNext = monthToCheck y dayNext (9) es menor que dayToCheck (12).
-
enlace: / VBA-ejemplos de intercambio en valores de intercambio []
las fechas. Almacenamos temporalmente una fecha a tempDate, por lo que Excel VBA puede cambiar las fechas correctamente. Añadir 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
-
Hacemos lo mismo con los nombres. Añadir 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
-
Cerramos el segundo bucle For Next (Fuera de la sentencia if).
Next j
Para i = 2 y j = 7, Excel VBA intercambió las fechas y nombres. Eso significa que consiguen Richard en la primera posición y Bregje en la posición 7. Esto también significa que tenemos un nuevo monthToCheck y dayToCheck en el inicio de la próxima iteración (para i = 2 y j = 8). Ahora vamos a comparar con Richard Dineke (j = 8). Se puede ver fácilmente que no hay necesidad de reemplazar esas fechas y nombres porque Richard tiene una fecha ‘inferior’. Como cuestión 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). Esto se debe a Richard tiene la fecha ‘más bajo’. De esta manera Excel VBA obtendrá (para i = 2) la fecha ‘más bajo’ en la primera posición. Para obtener la segunda fecha ‘más bajo’ en la segunda posición, Excel VBA repite los mismos pasos exactos para i = 3. Para obtener la tercera fecha ‘más bajo’ en la tercera posición, Excel VBA repite los mismos pasos exactos para i = 4, etc.
-
Cierre el primer bucle For Next (Fuera de la sentencia if).
Next i
-
Prueba de su programa.
Resultado: