Hace algunos meses publiqué una entrada sobre cómo calcular el trimestre de una fecha en Excel utilizando funciones, pero hoy vamos a desarrollar una función VBA que nos permita determinar el trimestre o semestre de una fecha en Excel.
Aunque pensándolo bien, ya que vamos a automatizar este tipo de cálculo, voy a extender el alcance de esta función para determinar también el bimestre y el cuatrimestre de una fecha. Pero antes de desarrollar el código VBA necesito explicarte un poco sobre la sentencia Select Case la cual utilizaré en el desarrollo de nuestra función.
Sentencia Select Case en VBA
Una de las instrucciones que comúnmente utilizamos en VBA es la sentencia If-Then-Else la cual nos permite tomar dos acciones diferentes de acuerdo al resultado de la evaluación realizada. Sin embargo, existen ocasiones en las que necesitamos realiza varias evaluaciones lo cual ocasiona que tengamos múltiples declaraciones If-Then-Else. Por ejemplo, supongamos que tenemos un código VBA donde la variable mes tiene un número entero entre 1 y 3 para el cual necesitamos devolver el nombre del mes correspondiente de la siguiente manera: si su valor es 1 devolveremos enero, si es 2 devolveremos febrero y si es tres será marzo. Si utilizamos la sentencia If-Then-Else para solucionar este problema, tendremos un código como el siguiente:
Puedes notar cómo la repetición de la sentencia If-Then-Else nos permite solucionar este problema. Sin embargo, imagina que en lugar de tener solo tres meses tuviéramos que hacerlo para los 12 meses del año, entonces tendríamos varias líneas de código con sentencias If-Then-Else muy similares.
Ya que a los programadores no les agrada tener que escribir líneas de código idénticas y prefieren encontrar una manera para ahorrar ese tiempo, es que se creó la sentencia Select Case la cual tiene el mismo efecto que varias sentencias If-Then-Else pero nos ahorra la introducción de varios caracteres en el código. Por ejemplo, las mismas líneas de código anterior se podrían escribir de la siguiente manera:
Ambas alternativas solucionan el mismo problema pero cuando tenemos que utilizar muchas sentencias If-Then-Else entonces es conveniente considerar la sentencia Select Case la cual no solo nos ahorrará la introducción de algunos caracteres sino que también ayudará en la legibilidad de nuestro código. Con esto en mente podemos proceder a la creación de una función VBA que nos permita determinar el bimestre, trimestre, cuatrimestre o semestre de una fecha en Excel.
Evaluación del período requerido
Ya que nuestra función podrá determinar tanto el trimestre como el semestre así como el bimestre y cuatrimestre de una fecha, entonces comenzaremos por implementar la estructura de decisión que nos permita diferenciar entre uno y otro. Pondré a nuestra función el nombre PERIODO y tendrá dos argumentos. El primero de ellos será la fecha que deseamos evaluar y el segundo el tipo de período que necesitamos conocer ya sea bimestre, trimestre, cuatrimestre o semestre. Este segundo argumento será de tipo entero y será la primera evaluación que haremos dentro de la función:
En este código estoy evaluando la variable tipo para saber si el usuario de la función está solicitando el cálculo del bimestre (2), trimestre (3), cuatrimestre (4) o semestre (6) y si especifica un número diferente a estos valores entonces se devolverá el valor cero.
Cálculo de cada período
De acuerdo al mes de la fecha especificada en el primer argumento se hará el cálculo dentro del periodo respectivo. Observa el código de nuestra función el cual explicaré posteriormente:
Function PERIODO(fecha As Date, tipo As Integer) As Integer Select Case tipo Case 2 'Calcular el bimestre PERIODO = WorksheetFunction.RoundUp(Month(fecha) / 2, 0) Case 3 'Calcular el trimestre PERIODO = WorksheetFunction.RoundUp(Month(fecha) / 3, 0) Case 4 'Calcular el cuatrimestre PERIODO = WorksheetFunction.RoundUp(Month(fecha) / 4, 0) Case 6 'Calcular el semestre PERIODO = WorksheetFunction.RoundUp(Month(fecha) / 6, 0) Case Default 'Devolver cero PERIODO = 0 End Select End Function
Para el cálculo de cada período utilizamos la función VBA Month la cual obtiene el mes de la fecha indicada en el primer argumento de la función PERIODO. Dicho mes lo dividimos entre 2 en caso del bimestre, entre 3 para el trimestre, entre 4 para el cuatrimestre y entre 6 para el semestre. El resultado de la división anterior lo pasamos como argumento a la función de Excel ROUNDUP que en español es la función REDONDEAR.MAS la cual redondea un número hacia arriba. El segundo argumento de la función ROUNDUP es cero en todos los casos porque deseo redondear siempre al entero más cercano.
Comprobando la función VBA
Para comprobar que nuestra función VBA devuelve el resultado correcto para cualquier tipo de período solicitado he colocado una lista de fechas en la columna A, una para cada mes del año. En seguida tenemos varias columnas para determinar el bimestre, trimestre, cuatrimestre y semestre al cual pertenece cada una de las fechas. Observa cómo nuestra función PERIODO devuelve el resultado correcto en cada caso:
De esta manera, con una misma función VBA podemos determinar el bimestre, trimestre, cuatrimestre o semestre de una fecha en Excel. Haz clic aquí para descargar el libro de trabajo que contiene el código de esta función de manera que puedas copiarlo y utilizarlo en tus libros de Excel.