Como calcuar fecha en que finaliza vacaciones

06/04/2008 - 07:20 por nio | Informe spam
Saludos a todos, de atemando agradezco el apoyo.
Resulta que estoy haciendo un programa de vacaciones para mas de 250
empleados para este 2008, me gustaria y serviria saver como en excel puedo
determinar la fecha en que un empleado regresaria de sus vacaciones teniendo
lo sig.

dias con derecho (habiles) ->16
fecha en que sale el dia lunes 5 de mayo 2008
haciendo el calculo manual el trabajador regresa el dia viernes 23 de mayo
2008

saben de alguna otra forma de hacer este calculo en excel considerando dias
festivos y dias domingos?

Salu2, Gracias desde Morelia Mich.

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
06/04/2008 - 23:10 | Informe spam
hola, !

__ 1 __
... favor explicar un poquito mas de que se trata la funcion persanalizada


__ 2 __
=mente con la funcion k.esimo.menor
Solo hay que nombrar en excel el rango de los dias feriados?


__ 3 __
... un ejemplo o explicar la forma en que por... la funcion personalizada o formula se puede resolver este planteamiento:
F/C A B C D
1 Diasc/dere. Dia descan 1º Dia Vac
2 17 Sabado Lun 5 de Mayo
3
Cual es el ultimo dia de Vac.
Que dia se presenta a trabajar



en todos los casos se supone/espera/asume/... que se trabaja con datos numericos-fecha (NO textos), entonces...
el dato que representas para la celda B2 (Sabado) es necesario modificarlo por el numero 7 (siete)
que es el que corresponde al dia sabado usando la funcion diasem(<fecha>)

1) la funcion (y lo que hace) viene explicado (creo que) muy claramente en los textos iniciales de la funcion misma...
' Funcion que suma los dias habiles de vacaciones
' ** ARGUMENTOS
' Fecha_Inicial = fecha a partir de la cual se empieza a contar
' Dias_Laborables = numeros de dias de vacaciones que le tocan que se quieren contar
' Dias_Festivos = dias a omitir en la cuenta como fechas especiales
' Omitir_Dias = dia a omitir como dia de la semana de descanso
' Domingo = 1
' Lunes = 2
' etc...
' Sabado = 7
' Devuelve el dia habil siguiente como fecha

2) en las formulas es necesario "sustituir" (algunos de) los datos "camuflados" a falta de los rangos especificos en la consulta
fecha_inicial => la celda que contiene el dato-fecha del primer dia de disfrute vacacional
dias_laborables => la celda que contiene el numero de dias (laborables) a que se tiene derecho como vacaciones
dias_festivos => el rango de celdas que contiene los datos-fecha de que dias se consideran festivos
-> la funcion k.esimo.menor(... solo hace "su trabajo" contabilizando dias laborables hasta alcanzar el numero de dias de vacaciones
-> las formulas son de "entrada matricial" (es decir, al introducirlas/editarlas se confirman con ctrl+shift+enter, NO con solo el enter)

3) para ajustar la funcion personalizada y las formulas propuestas a los datos de tu ejemplo (habiendo cambiado Sabado a 7-numerico)
y suponiendo que tienes un rango con las fechas festivas en A7:A9
y que el dia laboral en que se presenta a trabajar lo pones (o usas la formula) en la celda D2

OJO con el separador de argumentos, mi sistema usa a la coma ',' NO al punto y coma ';' :D

a) que dia se presenta a trabajar:

-> con la funcion personalizada: [D2] =Dia_Laborable(C2,A2,A7:A9,B2)

-> por la formula matricial: [D2]
Â+k.esimo.menor(
si((diasem(c2+(fila(indirecto("1:"&a2*10))))<>b2)
*esnod(coincidir(c2+(fila(indirecto("1:"&a2*10))),a7:a9,0))
,fila(indirecto("1:"&a2*10))),a2)

b) cual es el ultimo dia de vacaciones:

-> con la funcion personalizada: [E2] =Dia_Laborable(D2,-1,A7:A9,B2)

-> por la formula matricial: [E2]
Ò-k.esimo.menor(si((diasem(e2-(fila(indirecto("1:10"))))<>b2)
*esnod(coincidir(e2-(fila(indirecto("1:10"))),a7:a9,0)),fila(indirecto("1:10"))),1)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#7 nio
07/04/2008 - 05:00 | Informe spam
Gracias Hector Miguel
Dispensa la ignorancia pero de verdad no sale por medio de la función
personalizada
Pudieras de favor indicarme el codigo que se deve pergar en VB.
O mas bien indicarme de favor el codigo y donde devera pegarse es decir en
VB dentro de la hoja? o dentro del ThisWorkBook
Bueno este es el Codigo que amablemente me indicaste la ruta para copiarlo:

Option Explicit

'Funcion que suma los dias habiles de vacaciones
'** ARGUMENTOS
'Fecha_Inicial = fecha a partir de la cual se empieza a contar
'Dias_Laborables = numeros de dias de vacaciones que le tocan que se
'quieren contar
'Dias_Festivos = dias a omitir en la cuenta como fechas especiales
'Omitir_Dias = dia a omitir como dia de la semana de descanso
' Domingo = 1
' Lunes = 2
' Martes = 3
' Miercoles = 4
' Jueves = 5
' Viernes = 6
' Sabado = 7

'Devuelve el dia habil siguiente como fecha
Public Function Dia_Laborable(ByVal Fecha_Inicial As Date, _
ByVal Dias_Laborables As Integer, _
ByVal Dias_Festivos As Range, _
ByVal Omitir_Dias As Range) As Date
Dim co1 As Integer
Dim r As Range
Dim Esfestivo As Boolean
Dim EsOmitido As Boolean
Dim Direccion As Integer

'Los dias laborables no pueden ser cero
If Dias_Laborables <> 0 Then
'Para saber si aumenta o disminuye la fecha
Direccion = 1
If Dias_Laborables < 0 Then Direccion = -1
Do
Esfestivo = False
EsOmitido = False
'Aumentamos o disminuimos en uno la fecha inicial
Fecha_Inicial = Fecha_Inicial + Direccion
'Buscamos en los dias festivos
For Each r In Dias_Festivos
If r.Value = Fecha_Inicial Then
'Si es festivo sale del ciclo
Esfestivo = True
Exit For
End If
Next r
'Si es festivo no es necesario buscar en dias omitidos
If Not Esfestivo Then
'Buscamos en dias omitidos en caso de que no sea festivo
For Each r In Omitir_Dias
If r.Value = Weekday(Fecha_Inicial) Then
'Si es omitido salimos del ciclo
EsOmitido = True
Exit For
End If
Next r
End If
'NO deber ser festivo ni omitido para incrementar
If Not Esfestivo And Not EsOmitido Then
co1 = co1 + 1
End If
DoEvents
'Continuamos mienstras sea menor a los dias_laborables
Loop While co1 < Abs(Dias_Laborables)
'Asignamos la fecha encontrada a la funcion
Dia_Laborable = Fecha_Inicial
Else
'Si es cero devuelve un error tipo #!VALOR¡
Dia_Laborable = ""
End If

End Function

Estoy haciendole como me indicas en la pasada respuesta.
Creo que el problema lo tengo en el Codigo
Donde debo pergarlo?

Muchas pero muchas Gracias Sigo trajajando
Te comento que por medio de la formlua esta todo correcto
Como dice ppSoto Gracias mi estimado Gurü
Saludos
Respuesta Responder a este mensaje
#8 Héctor Miguel
07/04/2008 - 05:57 | Informe spam
hola, !

... no sale por medio de la funcion personalizada
... el codigo y donde devera pegarse es decir en VB dentro de la hoja? o dentro del ThisWorkBook...



las lineas del codigo las debes copiar/pegar en un modulo de codigo estandar/general/normal
y la forma de uso esta comentada en el mensaje anterior
(p.e.) asumiendo que los rangos de aplicacion (y su tipo de datos) son como en el ejemplo del menseja enterior...

OJO con el separador de argumentos, mi sistema usa a la coma ',' NO al punto y coma ';' :D

a) que dia se presenta a trabajar:

-> con la funcion personalizada: [D2] =Dia_Laborable(C2,A2,A7:A9,B2)

b) cual es el ultimo dia de vacaciones:

-> con la funcion personalizada: [E2] =Dia_Laborable(D2,-1,A7:A9,B2)



si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#9 Nio
08/04/2008 - 04:58 | Informe spam
Buenas Noches.
Hector Miguel te agradezco la paciencia y el interes que prestas con todos
los del foro y en especial por todos los que necesitamos un poquito mas de tu
paciencia e interes.

La formula personalizada y la formula matricial funcionan de menera muy
sorprendente.

Gracias

Saludos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida