top of page
Foto del escritorSistema MRP

Cálculo automático de las horas extraordinarias en Excel y VBA

Actualizado: 13 dic 2019


Hola emprendedores y entusiastas productivos. En este artículo vamos a realizar un formulario con VBA que calcule de forma automática los valores monetarios tanto para horas extraordinarias como para las horas suplementarias de los trabajadores que acumulen estos tiempos. Pero primero, observemos la definición de este concepto.


Horas extraordinarias o suplementarias

Según Pérez J. (2013), editor del portal web Definición.DE es aquel tiempo adicional, fuera del horario normal, que dedica el trabajador para ejercer una actividad laboral. Este tiempo debe pagarse con mayor valor al habitual, y este porcentaje dependerá de la legislación de cada país.


Ahora, según el código de trabajo del Ecuador, estas tienen una ligera diferencia que se observa a continuación:


Horas extras o extraordinarias

Tiempo adicional que se ejerce sábados, domingos o días feriados, el cual debe ser pagado con 100% de recargo.


Horas suplementarias

Tiempo adicional que se ejerce los días laborales fuera del horario normal hasta las 24h00, el cual debe ser pagado con 50% de recargo.


El acumulado de horas adicionales anuales difiere de un país a otro, pero existe un límite.


Con este breve prólogo, vamos a realizar un procedimiento para generar un cálculo automático para el valor tanto de horas extraordinarias como suplementarias. Entonces, vamos con ello:


1. Definir y establecer variables

Existen ciertas variables que pueden ser asignadas en alguna parte del libro de Excel, para ser asociadas a fórmulas que serán desarrolladas en el entorno de VBA, o ser establecidas a un formulario. Observemos cuáles pueden ser:


* Hora de salida: Hora de salida de la jornada diaria. Ej: 17h00 pm.

* Sueldo base: Sueldo percibido por el trabajador(a) en un periodo. Ej: 600 USD/mes.

* Horas de un día de trabajo: Horas que tendrá un día laboral normal. Ej: 8 h.

* Días de trabajo en el periodo: Días que se van a laborar durante un periodo determinado. Ej: 20 días/mes.


2. Establecer lista de trabajadores (opcional)

Para generar un mayor control sobre el "tipeo" o la entrada de datos por parte del usuario, se puede establecer un rango dinámico asociado a una lista desplegable en el formulario. En el siguiente link se tiene un procedimiento específico para su desarrollo: Rango dinámico en Excel y VBA.


Si se desea realizar una base de datos en Excel sobre la nómina del personal, se puede visualizar el siguiente link: Base de datos de nómina; para tener un mayor control sobre la lista de trabajadores de la organización.


3. Construcción de formulario en VBA

Vamos ahora con la elaboración de un formulario para asignar los elementos para determinar las horas extraordinarias y su valor como se observa en la imagen a continuación:

Calcular horas extras y suplementarias en Excel y VBA de forma automática
Calcular horas extraordinarias en Excel y VBA

Importante: Como se puede observar en la figura, los dos botones de opción se encuentran dentro de un marco o "frame", si no se realiza esta acción no se ejecutarán como un conjunto, sino de forma independiente, lo que en este formulario, no se requiere.


Si aún no conoces cómo construir un formulario con VBA puedes seguir el enlace a continuación: Base de datos en Excel y VBA ; en el punto número 3 se muestra el proceso detallado para construir un formulario de manera rápida y sencilla.


4. Codificación VBA

Los formularios deben contener controladores de error para guiar al usuario y generar una correcta entrada de datos. Todos los casilleros del formulario pueden bloquearse contra escritura, y serán de lectura solamente. Los diferentes códigos se anotan con diferentes eventos dentro del formulario. Para ir dentro del formulario y colocar el código completo asociado al mismo basta con hacer click derecho en el formulario o UserForm y click en ver código. Bien, observemos parte del código que contendrá este formulario, específicamente cuando se necesite añadir las horas trabajadas y su valor monetario por concepto de horas extraordinarias y suplementarias.


Para el evento Option Button 1 ( Horas suplementarias)

Es momento de asociar las variables con el código VBA. Vamos a asumir que las variables fueron denotadas en los siguientes casilleros de la hojas "PLANDECUENTAS" y "BD" de nuestro libro de Excel.


* Hora de salida: Sheets("PLANDECUENTAS").Range("EN4")

* Sueldo base: Sheets("BD").Range("BD7:BD1000") Columna 23 de esta matriz

* Horas de un día de trabajo: Sheets("PLANDECUENTAS").Range("DG4").Value)

* Días de trabajo en el periodo: Sheets("PLANDECUENTAS").Range("DG3")


Con las variables ya designadas, anotamos el siguiente código para el evento OptionButton1_Click:

 

Private Sub OptionButton1_Click()


'Definir variables

Dim hora As Date

Dim Tiempo() As String, Minutos As Double


'Validar tiempo

hora = TimeValue(Sheets("PLANDECUENTAS").Range("EN4").Text)

If Format(TimeValue(Now), "hh:mm") < hora Then

horas.Text = Empty

valor.Text = Empty

MsgBox ("¿Ya ha tocado la hora de salida?... recuerda que la salida es " & TimeValue(Sheets("PLANDECUENTAS").Range("EN4").Text) & " p.m.")

OptionButton1.Value = False

Else

horas.Text = Format(TimeValue(Now) - hora, "hh:mm")


'Buscar la remuneración base del trabajador en la BD nómina

Set buscar = Sheets("BD").Range("BD7:BD1000").Find(ComboBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)

valoringresos = buscar.Offset(0, 23).Value


Tiempo = Split(Format(horas.Text, "hh:mm"), ":")

Minutos = (CDbl(Tiempo(0)) * 60) + CDbl(Tiempo(1))

valor.Text = (((valoringresos / Sheets("PLANDECUENTAS").Range("DG4").Value) / Sheets("PLANDECUENTAS").Range("DG3").Value) * Minutos) / 60

End If


End Sub

 

Para el evento Option Button 2 ( Horas extraordinarias)

Las mismas variables son aplicadas a este evento, y el código es el que se muestra a continuación:

 

Private Sub OptionButton2_Click()


'Definir variables

Dim hora As Date

Dim Tiempo() As String, Minutos As Double


'Controlador de error: Si no son fechas de sábado, domingo

If Weekday(fechas.Text) = 2 Or Weekday(fechas.Text) = 3 Or Weekday(fechas.Text) = 4 Or Weekday(fechas.Text) = 5 Or Weekday(fechas.Text) = 6 Then

valor.Text = Empty

horas.Text = Empty

MsgBox ("Para ésta opción sólo pueden ser días Sábados o Domingos "), vbCritical

OptionButton2.Value = False

Exit Sub

End If


hora = TimeValue(Sheets("PLANDECUENTAS").Range("EN4").Text)


'Si son sábado o domingos entonces

If Weekday(fechas.Text) = 1 Or Weekday(fechas.Text) = 7 Then

horas.Text = Format(TimeValue(Now) - hora, "hh:mm")


'Buscar la remuneración base del trabajador en la BD nómina

Set buscar = Sheets("BD").Range("BD7:BD1000").Find(ComboBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)

valoringresos = buscar.Offset(0, 23).Value


'Valor de la hora del trabajador

Tiempo = Split(Format(horas.Text, "hh:mm"), ":")

Minutos = (CDbl(Tiempo(0)) * 60) + CDbl(Tiempo(1))

valor.Text = (((valoringresos / Sheets("PLANDECUENTAS").Range("DG4").Value) / Sheets("PLANDECUENTAS").Range("DG3").Value) * Minutos) / 60

End If

End Sub

 

Adicionalmente pueden existir otros controladores de error para generar una correcta entrada de datos, y alimentar el sistema que vayamos a elaborar de forma oportuna. Por lo tanto, si deseas realizar tu propio formulario para el desarrollo de horas extraordinarias y suplementarias, puedes considerar adquirir nuestro sistema a un costo bastante accesible, el cual muestra todo el código empleado para el formulario en cuestión, con un único pago y licencia perpetua, el mismo te permite editar todo el código sin ningún tipo de restricción, y muchos otros beneficios y funcionalidades que puedes observar en esta web en el apartado Descripción - Funciones.


Si deseas visualizar la ejecución del programa para el formulario en cuestión puedes observar el siguiente vídeo:


Por mi parte, me despido, sin antes desearles un genial día. Y, no se olviden de sonreír, para recordar que la vida sonríe siempre.


Referencias bibliográficas:

Julián Pérez Porto (2013). [En línea]. Extraído de la página web: https://definicion.de/horas-extras/


418 visualizaciones0 comentarios

コメント


bottom of page