Foros del Web » Soporte técnico » Ofimática »

Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Estas en el tema de Ayuda!!! suma de dias de un rango de fechas que se traslapan o no en el foro de Ofimática en Foros del Web. Hola, tengo un proyecto de programacion que involucra el calculo de dias entre dos fechas. La cuestion se complica debido a que tengo un array ...
  #1 (permalink)  
Antiguo 27/01/2011, 07:56
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Hola, tengo un proyecto de programacion que involucra el calculo de dias entre dos fechas. La cuestion se complica debido a que tengo un array de fechas iniciales y otro de fechas finales. La idea es contar los dias en total sin contar las fechas que se traslapen.
Es decir si tengo las fechas:
row 1 ---> 11/03/2011 a 11/04/2011
row 2 ---> 15/03/2011 a 15/04/2011
row 3 ---> 20/04/2011 a 16/06/2011

Entonces se deberian contar los rangos de fechas del 11/03/2011 al 15/04/2011 mas el rango de fechas 20/04/2011 al 16/06/2011.
Como podria hacer eso via vba de excel o alguna orientacion de como programarlo.
Muchas gracias!.
  #2 (permalink)  
Antiguo 27/01/2011, 16:55
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Lo resuelves con una fórmula MATRICIAL como la siguiente:

= SUMAPRODUCTO( B1:B3 - A1:A3 ) - SUMAPRODUCTO( SI( A2:A3<B1:B2; B1:B2 - A2:A3; 0) )

Si te equivocas y no ingresas la fórmula como matricial verás : #¡VALOR!

Saludos, Cacho.
  #3 (permalink)  
Antiguo 27/01/2011, 20:56
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Hola gracias, pero la idea es que lo tengo que hacer en vba y no para 3 filas sino que lo tengo que generalizar.

Última edición por fjchavez; 27/01/2011 a las 21:16
  #4 (permalink)  
Antiguo 28/01/2011, 08:32
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Entiendo lo que dices... Pero, ¿Qué te impide generalizar la fórmula mostrada, tanto como implementarla en VBA?

Francamente: ¡es muy sencillo! pues la base ya la tienes.
  #5 (permalink)  
Antiguo 28/01/2011, 10:19
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Entiendo que para TI sea muy sencillo. Pero si por ejemplo agrego ademas de las filas que mencioné las siguientes:

row 1 ---> 11/03/2011 a 11/04/2011
row 2 ---> 15/03/2011 a 15/04/2011
row 3 ---> 20/04/2011 a 16/06/2011
row 4 ---> 26/11/2011 a 26/12/2011
row 5 ---> 17/07/2011 a 18/08/2011
row 6 ---> 12/02/2011 a 12/03/2011
row 7 ---> 16/06/2011 a 05/08/2011


ahi tu formula no me funciona. Y si además es para un rango de 100 a mas filas y donde las fechas no van en orden necesariamente. A eso me refiero con "generalizarlo".
Agradezco tu ayuda
  #6 (permalink)  
Antiguo 28/01/2011, 11:35
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
De acuerdo Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Asumiendo que las fechas se encontraran en las columnas A y B (al igual que lo que te mostrara en la fórmula base) y a partir de la celda A1, podrías intentar lo siguiente:

Código vb:
Ver original
  1. Sub Macro781()
  2. Dim LastRow As Long, Q As Long
  3. Application.ScreenUpdating = False
  4.  
  5. ' Determino última fila
  6. LastRow = [a1].End(xlDown).Row
  7.  
  8. ' Defino "AL" como columna auxiliar. Para el cálculo necesito que la columna A
  9. ' esté ordenada.
  10. ' Al término del cálculo vuelvo al orden inicial mediante esta columna
  11. [AL1] = 1: [AL1].Resize(LastRow).DataSeries Type:=xlLinear
  12.  
  13. ' Ordeno según columna A
  14. Range("A1:AL" & LastRow).Sort Key1:=[a1], Order1:=xlAscending, Header:=xlNo
  15.  
  16. ' Fórmula Matricial en celda D1
  17. [d1].FormulaArray = "= SUMPRODUCT( B$1:B" & LastRow & " - A$1:A" & _
  18.   LastRow & " ) - SUMPRODUCT( IF( A$2:A" & LastRow & "<B$1:B" & _
  19.   LastRow - 1 & ", B$1:B" & LastRow - 1 & " - A$2:A" & LastRow & ", 0) )"
  20.  
  21. ' Traslado resultado a variable "Q"
  22. Q = [d1]: [d1].ClearContents
  23.  
  24. ' Ordeno según columna AL
  25. Range("A1:AL" & LastRow).Sort Key1:=[AL1], Order1:=xlAscending, Header:=xlNo
  26.  
  27. ' Elimino columna AL: cumplió su cometido
  28. [AL1].EntireColumn.Delete
  29. Application.ScreenUpdating = True
  30.  
  31. ' Muestro el dato en D1
  32. [d1] = Q
  33. End Sub

Saludos, Cacho.
  #7 (permalink)  
Antiguo 29/01/2011, 14:04
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Soy algo ignorante en esto de macros, algunas para mi mismo, SIEMPRE pido ayuda por mi experiencia casi nula.

Solo quiero hacer una observacion:

Las fechas estan desordenadas, ¿que impide 1º ordenarlas y luego hacer la cuenta de los dias?

y ¿porque tiene que ser brincando fechas si ordenandolas 1º (como referi arriba) y luego contar desde la 1ª 11/03 hasta la ultima 26/12
Porque no entiendo el porque tiene que saltar fechas si quier saber la cantidad de dias entre la 1ª y ultima

row 1 ---> 11/03/2011 a 11/04/2011
row 2 ---> 15/03/2011 a 15/04/2011
row 3 ---> 20/04/2011 a 16/06/2011
row 4 ---> 26/11/2011 a 26/12/2011
row 5 ---> 17/07/2011 a 18/08/2011
row 6 ---> 12/02/2011 a 12/03/2011
row 7 ---> 16/06/2011 a 05/08/2011

Talves yo no esté entendiendo bien la palabra traslapan
  #8 (permalink)  
Antiguo 29/01/2011, 20:35
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

El concepto de "traslapar" está muy bien ejemplificado por fjchavez en su primer mensaje.

Y, de hecho: si las fechas no estuviesen traslapadas no sería necesario ordenar nada ni -mucho menos- una macro.

Pero lamentablemente: ¡no es el caso!...
  #9 (permalink)  
Antiguo 29/01/2011, 21:19
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

mrof, no quise decir lo contrario, yo de construccion de macros o programacion, mis conocimientos son casi nulos.
Si por casualidad entendiste lo contrario, perdon, no era eso que queria preguntar.
Y si preguntar se trata, pues eso mismo fue lo que hice, que me expicaran cual el significado
  #10 (permalink)  
Antiguo 29/01/2011, 21:37
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Por el contrario, amigo JoaoM: te entendí a la perfección y, por cierto, me diste "pie" para agregar un comentario adicional.

Si no te fuese suficiente el ejemplo mostrado en la pregunta inicial para comprender la idea del "traslape", pues hazte un paseíto por la RAE:

- Definición de traslapar

Saludos, Cacho.
  #11 (permalink)  
Antiguo 30/01/2011, 09:28
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Lo que pasa talves es que;
Al aplicar la macro me dá el resultado, 212. Estos 212 son referentes a que fechas? esto es lo que yo por mi falta de conocimiento, no logro ver.

Disculpa mi atrevimiento x las preguntas mias que perecieran tontas, no quiero que pienses en que estoy haciendo de tu persona, un tutor o profesor.
Explico mi resultado, no se si será cierto

Tengo fechas
row A1 ---> 11/03/2011 B1 11/04/2011
row A2 ---> 15/03/2011 B2 15/04/2011
row A3 ---> 20/04/2011 B3 16/06/2011
row A4 ---> 26/11/2011 B4 26/12/2011
row A5 ---> 17/07/2011 B5 18/08/2011
row A6 ---> 12/02/2011 B6 12/03/2011
row A7 ---> 16/06/2011 B7 05/08/2011

ORDENA las fechas alfabeticamente las 7 fechas A1 en AL (y X supuesto la B conjuntamente) para contar los dias de diferencia entre cada 2 fechas (ya ordenadas alfabeticamente) y, al final SUMA TODOS resultados de entre fechas y dá el resultado en D1 (o el que le ponga en [d5] = Q o H6 x ejemplo.
¿estaré en lo cierto?.

Lo cierto es que yo saco la cuenta de A y la respectiva en B manualmente y me dá 266, 1 mas 1 menos
X E. A1 con B1 me dá digamos que 30 dias
A2 con B2 me dá 30 tambien
A3 con B3 56
ect ect para un total de 266 aproximadamente y nunca 212, ESTA es mi incertidumbre, porque claro que al ordenar la columna A, las fechas de la columna B acompañan siempre su pareja en A, para donde vaia.

Acabo de hacer una prueba y fue:

Cambie la fecha row A2 ---> 15/03/2011 B2 15/04/2011
a B2 15/08/2011 adelantando 4 meses como puedes ver, 4 meses son 120 dias y la diferencia de antes a ahora solo me dá 5 dias, 212 a 217 y no 212 de antes + 120 = 332.

Por eso te digo y repito, no entiendo programacion así como no la sé hacer y manualmente darme eso, por mi ignorancia en programacion, hago TODAS ESTAS PREGUNTAS que pueden parecer tontas

Última edición por JoaoM; 30/01/2011 a las 10:08
  #12 (permalink)  
Antiguo 30/01/2011, 15:58
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Esperemos unas horas para ver si el generador de la "criatura" tiene interés en ver resuelto su problema...
  #13 (permalink)  
Antiguo 30/01/2011, 17:53
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

mrocf gracias por la ayuda, estaba revisando la formula, funcionaba perfectamente cuando derrepente me tope con esta serie de fechas!!!!

Para este caso:

row 0----->FECHA INICIO a FECHA FIN
row 1----->12-feb-11 a 12-mar-11
row 2----->12-feb-11 a 13-mar-11
row 3----->13-feb-11 a 13-mar-11
row 4----->15-feb-11 a 15-dic-11
row 5----->16-jul-11 a 17-ago-11

Esta en orden pero no me suma correctamente.
  #14 (permalink)  
Antiguo 30/01/2011, 18:30
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Indica, por favor:

a) Cual es el resultado que entrega la macro (ello es para ver si la implementaste de un modo correcto);
b) Cuanto es lo que debería sumar según tus cálculos;
c) Y, más importante aún: ¿Cómo llegas a ese resultado?
  #15 (permalink)  
Antiguo 30/01/2011, 19:17
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Hola,

Adjunto una imagen de los calculos:


a) El resultado que me arroja es 186
b) Debería ser 307 (cuento el dia final - dia inicial +1 para incluir el extremo)
c)
-Llegue a ese resultado primero hago dia final - dia incial +1
-Luego evaluo las fechas, si hay alguna fecha que ya este incluida en otra no la cuento.
- Al final llego a 2 fechas:
12/02/2011 a 13/03/2011
15/02/2011 a 15/12/2011
que seria solo una :
12/02/2011 al 15/12/2011,
lo que me da como resultado 307

Todo este proceso será posible automatizarlo?
  #16 (permalink)  
Antiguo 30/01/2011, 20:17
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

¿Has entendido, Joao, a que se refiere fj con "traslapar"?...
  #17 (permalink)  
Antiguo 31/01/2011, 11:18
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Algo si, coincidencia, simultaneidad, superponer y algo mas segun dicionario
  #18 (permalink)  
Antiguo 31/01/2011, 14:19
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Estuve mirando la nueva información que aporta fj y se advierte que cierto tipo de solapamiento de fechas (particularmente: las fechas de "fin") no pueden ser contempladas en una fórmula, por más compleja que ésta sea.

De modo que habrá que cambiar un aspecto del ángulo de análisis. Pregunto: ¿Es necesario que al término de la macro, la información quede ordenada como al inicio del proceso, o podría quedar ordenada según la fecha de inicio?

Saludos, Cacho.
  #19 (permalink)  
Antiguo 01/02/2011, 06:02
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Como dije y sigo repitiendo, yo en esto de programacion, NADA que ver pero ideas si. ¿Y sabes como se dice a alguien que tiene ideas? IDIOTA jejejejejejeje
Bien, ahora sin broma, en serio;

¿Se podria hacer macro en que en la columna C1 (XE.) colocara la diferencia entre las dos de A y B as fechas
row A1 ---> 11/03/2011 B1 11/04/2011 C1 30 (digo +-)
row A2 ---> 15/03/2011 B2 15/04/2011 C2 30 (digo +-)
ect ect

en C3 o D1 la suma (D1 60 dias) o C3 60 Dias?

¿podria ser?

solo una idea
  #20 (permalink)  
Antiguo 01/02/2011, 08:57
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

En realidad si funciona el metodo sin k me regrese el orden original devuelta no importa, la idea es que me de el calculo correcto
  #21 (permalink)  
Antiguo 01/02/2011, 11:54
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
De acuerdo Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

En ese caso se simplifican las cosas. Por ejemplo, para una estructura de datos como:


podrías intentar:

Código vb:
Ver original
  1. Sub Macro787()
  2. Dim LastRow As Long, C As Range
  3. Application.ScreenUpdating = False
  4. ' Determino última fila
  5. LastRow = [a1].End(xlDown).Row
  6. ' Para el cálculo necesito que las columnas A y B estén ordenadas.
  7. Range("A1:B" & LastRow).Sort Key1:=[a1], Order1:=xlAscending, _
  8.   Key2:=[b1], Order2:=xlAscending, Header:=xlNo
  9. [AM1:AN1] = [a1:b1].Value
  10.  
  11. For Each C In Range("A2:A" & LastRow)
  12.   Select Case C < [an65536].End(xlUp)
  13.     Case True
  14.       If C.Offset(, 1) > [an65536].End(xlUp) Then [an65536].End(xlUp) = C.Offset(, 1)
  15.     Case False
  16.       [am65536].End(xlUp).Offset(1).Resize(, 2) = C.Resize(, 2).Value
  17.   End Select
  18. Next C
  19. ' Muestro el dato en D1
  20. With [am65536].End(xlUp)
  21.   [d1] = Evaluate("SUMPRODUCT( 1 + AN1:AN" & .Row & " - AM1:AM" & .Row & ")")
  22. End With
  23.  
  24. ' Elimino columnas AM:AN pues cumplieron su cometido
  25. [AM1:AN1].EntireColumn.Delete
  26. Application.ScreenUpdating = True
  27. End Sub

¿Es lo que estabas buscando?
Saludos, Cacho.

Última edición por mrocf; 01/02/2011 a las 12:04
  #22 (permalink)  
Antiguo 01/02/2011, 12:50
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.945
Antigüedad: 17 años, 3 meses
Puntos: 39
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Talves me esté metiendo en una cama con colchon de puras agujas.
Y digo esto porque el tema no es mio y tampoco se como aportar solucion, esta ultima es la principal razon por la cual, el colchon que me espera talves esté lleno de agujas.

Despues del resultado de los dos codigos, el anterior y ahora este el resultado es 212 y 216 respectivamente luego de ordenada la A como pueden observar

Luego hice un cambio en la fecha roja

15/03/2011 ----------15/04/2011 ------- 15/03/2011 ---15/07/2011
---------------
12/02/2011------12/03/2011 = 30
11/03/2011------11/04/2011 = 30
15/03/2011------15/07/2011 = 120
20/04/2011------16/06/2011 = 56
16/06/2011------05/08/2011 = 59
17/07/2011------18/08/2011 = 31
26/11/2011------26/12/2011 = 30

Total 356 dias (+-)

y el resultado fue 217 y 219 respectivamente

La interrugante mia de unos posts arriba era esa, si aumento la fecha 3 meses (120 dias) ¿porque l diferencia es de solo 5 y 3 dias?.

Si hago el calculo de fecha entre fecha me dá en total 264 +- con Ferbrero a 28 dias
¿Como es que me dá uno 212 y 216? ¿donde salen estos números? y no llega a 264?

Última edición por JoaoM; 01/02/2011 a las 12:59
  #23 (permalink)  
Antiguo 01/02/2011, 14:19
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

mrocf no entiendo tu codigo desde el for each pero funciona perfectamente!!!!!!!!!!!!! y creo que queda generalizado el contar los dias cuando hay fechas que se traslapan o no!!
Por otro lado creo este procedimiento deberia ser elevado a Funcion!!!! se puede??, es decir:

Código:
Function cuentadias(r as range)

cuenta días = Call Macro787

end function
  #24 (permalink)  
Antiguo 01/02/2011, 16:11
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
De acuerdo Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

La base del funcionamiento la puedes ver en lo que se va almacenando en las columnas AM y AN.
Si lo miras bien verás que se hace el mismo análisis que harías "a mano".

Una vez que lo hayas comprendido, podrías -efectivamente- reformular el "For Each - Next" de modo de no llevar la información a celdas sino a una matriz de dos columnas.

Naturalmente, al término del "For Each - Next", en lugar del "Evaluate" tendrás que restar la fecha de fin menos la fecha de inicio para cada fila de la matriz, e ir acumulando el resultado.

Ten en cuenta (esto es lo más importante desde lo conceptual) que desde una función personalizada no es posible manipular objetos (te recuerdo que las celdas del Excel son objetos).
Por ello no es factible un traslado "formal" (así como así) del código mostrado a una función personalizada.

Saludos y me alegra que te haya sido de utilidad.
Saludos, Cacho.
  #25 (permalink)  
Antiguo 03/02/2011, 17:24
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Ok esa nueva matriz que iria almacenando los datos, como hago para redimensionarla???
Estoy usado Redim Preserve pero no logro redimensionarla y que me ingrese otra fila??
  #26 (permalink)  
Antiguo 04/02/2011, 14:09
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Mira por aquí: Instrucción ReDim.

Saludos, Cacho.
  #27 (permalink)  
Antiguo 06/02/2011, 19:49
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Hola mrocf,
Publico la funcion que he creado para este calculo por si alguien más se topa con esta tarea.

Funcion OrdenarMatrizNx2: Coje el rango y ordena segun fechas y lo almacena en una matriz Nx2
Funcion TDiasTraslapan: Calcula la suma total de dias (sin repetición) cuando hay fechas que se traslapan.

Código VBA:
Ver original
  1. Function OrdenarMatrizNx2(r As Range) As Variant
  2.  
  3. Dim ArrayName As Variant
  4. Dim t As Variant
  5. Dim i As Integer
  6. Dim j As Integer
  7. Dim y As Integer
  8. Dim condition1 As Boolean
  9. Dim condition2 As Boolean
  10. Dim sortcolumn1 As Integer
  11. Dim sortcolumn2 As Integer
  12.  
  13. ArrayName = r
  14. sortcolumn1 = 1
  15. sortcolumn2 = 2
  16.  
  17. For i = LBound(ArrayName, 1) To UBound(ArrayName, 1) - 1
  18.     For j = LBound(ArrayName, 1) To UBound(ArrayName, 1) - 1
  19.         condition1 = (ArrayName(j, sortcolumn1) > ArrayName(j + 1, sortcolumn1))
  20.         condition2 = ((ArrayName(j, sortcolumn1) = ArrayName(j + 1, sortcolumn1)) And (ArrayName(j, sortcolumn2) > ArrayName(j + 1, sortcolumn2)))
  21.         If condition1 Or condition2 Then
  22.             For y = LBound(ArrayName, 2) To UBound(ArrayName, 2)
  23.                  t = ArrayName(j, y)
  24.                  ArrayName(j, y) = ArrayName(j + 1, y)
  25.                  ArrayName(j + 1, y) = t
  26.             Next y
  27.         End If
  28.     Next j
  29. Next i
  30.  
  31. OrdenarMatrizNx2 = ArrayName
  32.  
  33. End Function
  34.  
  35. Function TDiasTraslapan(r As Range) As Integer
  36.  
  37. Dim a, b, d As Integer
  38. Dim ArrayName As Variant
  39. ReDim ArrayFechas(1 To 2, 1 To 1) As Variant
  40. Dim dias As Long
  41.  
  42. Application.Volatile
  43.  
  44. 'Trasladamos a matriz y ordenamos los datos con la funcion OrdenaMatrizNx2
  45. ArrayName = OrdenarMatrizNx2(r)
  46. 'Asignamos la primera columna con los valores fecha inicial y fecha final de ArrayName
  47. ArrayFechas(1, 1) = ArrayName(1, 1)
  48. ArrayFechas(2, 1) = ArrayName(1, 2)
  49. 'Procedemos a comparar y rellenar la matriz ArrayFechas
  50. For a = LBound(ArrayName, 1) + 1 To UBound(ArrayName, 1)
  51.     b = LBound(ArrayName, 2)
  52.     fila = UBound(ArrayFechas, 1)
  53.     columna = UBound(ArrayFechas, 2)
  54.     Select Case ArrayName(a, b) <= ArrayFechas(fila, columna)
  55.         Case True
  56.             If ArrayName(a, b + 1) > ArrayFechas(fila, columna) Then
  57.                 ArrayFechas(fila, columna) = ArrayName(a, b + 1)
  58.             End If
  59.         Case False
  60.             ReDim Preserve ArrayFechas(1 To 2, 1 To columna + 1)
  61.             ArrayFechas(fila - 1, columna + 1) = ArrayName(a, b)
  62.             ArrayFechas(fila, columna + 1) = ArrayName(a, b + 1)
  63.     End Select
  64. Next a
  65.        
  66. ArrayFechas = Application.Transpose(ArrayFechas)
  67. dias = 0
  68.  
  69. For d = LBound(ArrayFechas, 1) To UBound(ArrayFechas, 1)
  70. dias = dias + CDate(ArrayFechas(d, UBound(ArrayFechas, 2))) - CDate(ArrayFechas(d, LBound(ArrayFechas, 2))) + 1
  71. Next d
  72.  
  73. TDiasTraslapan = dias
  74.  
  75. End Function

Gracias por la ayuda mrocf
  #28 (permalink)  
Antiguo 06/02/2011, 20:03
 
Fecha de Ingreso: julio-2006
Mensajes: 114
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

Una consulta mas!!!, pues sucede que la instrucción application.volatile no me recalcula bien la formula, me da otro valor, pero si voy a la celda que tiene la fórmula, doy F2 y enter.....y recien me hace el calculo correcto.
Hay alguna forma de que ni bien cambio alguna fecha, me recalcule la formula?
  #29 (permalink)  
Antiguo 03/03/2011, 13:09
 
Fecha de Ingreso: marzo-2011
Mensajes: 1
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda!!! suma de dias de un rango de fechas que se traslapan o no

como lo puedo ejemplificar en asp.net... utilizando esas dos funciones

Etiquetas: dias, fechas, rango, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:27.