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.
> ... haciendo un programa de vacaciones para mas de 250 empleados para este 2008
> ... 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?
si necesitas calcular una fecha "de regreso" de un periodo (de disfrute) vacacional
y dependiendo de cuales sean tus dias considerados como festivos
(y alguno que otro detalle que pudiera estar pendiente como si el sabado es dia laboral)...
encontraras una funcion personalizada y propuestas por funciones de hoja de calculo en: http://tinyurl.com/bpnjf
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector
Si no quieres meter código, hay una forma más sencilla, ahí van las
instrucciones:
Ve a Tools+Add Ins y seleccionas la casilla ANALYSIS TOOLPAK y esto te
libera para que puedas utilizar una fórmula para lo que tu quieres:
Suponiendo que en A1 tienes la fecha de inicio de sus vacaciones, en B1 los
días a disfrutar, y en la columna C los días festivos y todos los domingos
del año. L afórmula será la siguiente:
=WORKDAY(A1,B1,C1:C20)
Suponiendo que en C20 terminas tus días festivos y domingos.
Espero y te sirva.
Saludos desde Monterrey, México.
Carlos Muñiz
emec...@hotmail.com
"nio" escribió:
> Si no quieres meter codigo, hay una forma mas sencilla, ahi van las instrucciones:
> Ve a Tools+Add Ins y seleccionas la casilla ANALYSIS TOOLPAK... para que puedas utilizar una formula para lo que tu quieres:
> Suponiendo que en A1 tienes la fecha de inicio de sus vacaciones, en B1 los dias a disfrutar
> y en la columna C los dias festivos y todos los domingos del a#o. La formula sera la siguiente: =WORKDAY(A1,B1,C1:C20)
> Suponiendo que en C20 terminas tus dias festivos y domingos...
de la parte final de la consulta de OP...
> " ... forma de hacer este calculo en excel considerando dias festivos y dias domingos?"
pareciera desprenderse que los sabados se consideran dia laboral y...
(hasta donde se) la funcion workday (dia.lab en espanol) considera los sabados como NO laborables
(entonces) existe la posibilidad de que el calculo requiera de "algo mas" que (el solo uso de) la funcion dia.lab -?-
(este punto se trata en las conversaciones sugeridas)
habra que esperar por la retro-alimentacion de OP ;)
saludos,
hector.
Si me pudieras apoyar mi estimado.
Estoy de acuerdo en que estos puntos se ven mas a detalle en la conversación
que sugieres pero deveras no le entendi
Saludos..
--
__ 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]
=c2+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]
=d2-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.
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
> ... 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.
La formula personalizada y la formula matricial funcionan de menera muy
sorprendente.
Gracias
Saludos.