#calculodehorasextras #calculodehorassuplementarias #calculodehorasextrasexcel #calculodehorasdetrabajoenecuador #horasextrascalculo #horasextrascalculoecuador #nominadepago #basededatosexcel #horasextras #horasextras2019 #horasextraordinarias
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:
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/
コメント