** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Generacion de rangos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Generacion de rangos

 Responder Responder
Autor
Mensaje
ximo200 Ver desplegable
Asiduo
Asiduo


Unido: 11/Junio/2007
Localización: España
Estado: Sin conexión
Puntos: 481
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita ximo200 Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Generacion de rangos
    Enviado: 25/Septiembre/2017 a las 17:59
Buenas tardes a todos

Veréis, estoy tratado de realizar un excel donde selecciones el horario semanal (poniendo X en ese horario), y en base a esa selección, pulsando un boton, sumara una serie de ocurrencias semanales a lo largo del año.

Es decir, que yo seleccione aquí el horario:
L M X J V S D
0:00   a    6:00
6:00   a    8:00
8:00   a    9:00 X X X X X
9:00   a    10:00 X X X X X X
10:00 a    14:00 X X X X X X
14:00 a    15:00 X X X X X
15:00 a    18:00 X X X X X X
.................

Y luego yo tengo una serie de ocurrencias, que sumare en función de ese rango. 
Estas ocurrencias estan de la siguiente manera:

1 2 3 4 5 6 7 8 9 10 11 12 13
D L M X J V S D L M X J V
0:00   a    6:00 1
6:00   a    8:00 1 4 3 1
8:00   a    9:00 3 2 1
9:00   a    10:00 6 1
10:00 a    14:00 1 2 2
14:00 a    15:00
15:00 a    18:00
........................


Se os ocurre alguna manera de generar rangos para ese horario, para de esta manera optimizar la operación suma de estos rangos?

Si el rango de horario fuera fijo, recorriendo el año entero en multiplos semanales, lo tendría, mediante la función:
Parte1 = WorksheetFunction.Sum(Range(Cells(33, 24 + k), Cells(34, 30 + k)))
Parte2 = ........


Estoy haciendo pruebas, pero la verdad no me acaba de salir.

Se os ocurre alguna idea de distribuir en "partes" ese horario, para luego recorrer el año por semanas en función de esas partes?

Gracias

Un saludo




Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5002
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Septiembre/2017 a las 01:27
Se ve que has intentado explicarte, pero yo no acabo de 'ver' lo que pretendes hacer.

- Veo una primera tabla con horarios (con las 'x') que supongo que ya la tienes pero no veo fechas (para comparar con los días del año).
- Veo una segunda tabla con horarios (con números) también supongo que ya la tienes y tampoco veo fechas.
- Parece que quieres conseguir 'algo' mediante código VBA,... pero no se que es ese 'algo'.

Si pudieras poner unos ejemplos más descriptivos, indicando: «desde aquí quiero conseguir esto otro.



Pregunta lo que no sabes, recuérdalo para cuando te pregunten y ofrece tu ayuda (reconforta).

Mi sitio_web con ejemplos Excel.
Arriba
ximo200 Ver desplegable
Asiduo
Asiduo


Unido: 11/Junio/2007
Localización: España
Estado: Sin conexión
Puntos: 481
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita ximo200 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Septiembre/2017 a las 09:15
Hola de nuevo Antonio,

Veras, la primera tabla solo plasma los siete días de la semana, donde tu seleccionaras, poniendo X, la franja horaria a incluir de cada uno de los 7 días.
Imagínate que yo quiero incluir los lunes de 8:00 a 14:00 horas y de 15:30 a 21:00 horas, lo martes otro horario diferente, los miercoles......

La segunda tabla si que ya es el calendario de lo que llevamos de año, donde mediré las ocurrencias en función de los seleccionado en la primera tabla y por semana.

Es decir:
semana1 = suma de ocurrencias de Lunes de 8:00 a 14:00 horas y de 15:30 a 21:00 + martes de ..... + miercoles de ....... + jueves de .....    -------   + domingo de .....

semana2 = lo mismo, pero trasladado a la semana 2 del año. Que ya será tan sencillo como multiplicar por 7.

El problema es que no veo como dividir esa semana en rangos, en función de las X que se hayan puesto en la tabla 1, para luego sumar las ocurrencias dentro de esa seleccion semana a semana.

Cuando lo hacia con un rango fijo, era sencillo, conseguía representar la semana con 5 rangos:



'con esto recorro 1 a 1 las 52 semanas
For i = 1 To 52

k = ((7 * i) - 7)

Parte1 = WorksheetFunction.Sum(Range(Cells(33, 24 + k), Cells(34, 30 + k)))
Parte2 = WorksheetFunction.Sum(Range(Cells(29, 25 + k), Cells(32, 25 + k)))
Parte3 = WorksheetFunction.Sum(Range(Cells(19, 26 + k), Cells(32, 26 + k)))
Parte4 = WorksheetFunction.Sum(Range(Cells(11, 25 + k), Cells(18, 31 + k)))
Parte5 = WorksheetFunction.Sum(Range(Cells(19, 25 + k), Cells(19, 25 + k)))
Total = Parte1 + Parte2 + Parte3 + Parte4 + Parte5




Espero haberme explicado.

Gracias

Un saludo
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5002
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Septiembre/2017 a las 10:25

No suele ocurrirme, pero no entiendo la idea. Me temo que habrá que esperar por  alguien con las ideas más claras que yo.


Yo no veo la relación de la primera tabla con la segunda.  Por ejemplo en la primera tabla no hay 'X' en el horario 6:00 a 8:00, sin embargo en la segunda tabla tienes valores en varios días con ese horario, por el contrario en el horario 15:00 a 18:00 hay varias 'X' y en la segunda tabla no se reflejan valores.


Por otro lado yo transpondría los datos de la tabla 2, ya que son menos los horarios que los días del año, pero seguramente es debido a que no consigo 'ver' lo que estás haciendo.


Siento no poder ayudarte (al menos de momento).



Pregunta lo que no sabes, recuérdalo para cuando te pregunten y ofrece tu ayuda (reconforta).

Mi sitio_web con ejemplos Excel.
Arriba
ximo200 Ver desplegable
Asiduo
Asiduo


Unido: 11/Junio/2007
Localización: España
Estado: Sin conexión
Puntos: 481
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita ximo200 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Septiembre/2017 a las 11:07
Hola Antonio,

Soy yo que no me he explicado bien.

La primera tabla con las X marca un horario de trabajo

Los números de la segunda tabla son intervenciones realizadas en esa franja horaria. Pueden haber o no intervenciones fuera de ese horario.

Lo que pretendo es, jugando con el horario, poder ver el numero de intervenciones que se quedan dentro o fuera en cada semana.

Un saludo
Arriba
ximo200 Ver desplegable
Asiduo
Asiduo


Unido: 11/Junio/2007
Localización: España
Estado: Sin conexión
Puntos: 481
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita ximo200 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Septiembre/2017 a las 13:49
Buenas tardes de nuevo

Simplificándolo un poco
si tuviéramos en una linea de excel lo siguiente

L M X J V S D



Donde debajo de cada día puede o no haber una X. Como recorrerías ese 7 celdas para agrupar aquellas que este en blanco de la manera mas optima.

Ejemplo:

L M X J V S D
X X X

Parte1 = WorksheetFunction.Sum(Range(Cells(2, 3), Cells(2, 5)))
Parte2 = WorksheetFunction.Sum(Range(Cells(2, 6), Cells(2, 7)))

Total = Parte1 + Parte2

Ejemplo 2:
L M X J V S D
X X X X

Parte1 = WorksheetFunction.Sum(Range(Cells(2, 1), Cells(2, 3)))

Total = Parte1

Claro esta, el numero de partes dependera de como esten configurados los espacioes en blanco.

Espero haberme expresado mejor.

Gracias

Un saludo

Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5002
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 26/Septiembre/2017 a las 21:42

Si lo que pretendes es contar cuantas celdas tiene cada grupo de celdas en blanco, prueba con:


En un módulo ordinario.

Function CuentaB(rango As Range)

  Dim celda As Range, n&, i1&, i2&

  For Each celda In rango.Cells

    If celda.Value = "" Then

      If i1 = i2 Then

        i1 = celda.Column

        n = n + 1

        CuentaB = CuentaB & "Parte" & n & "= "

      End If

      If celda <> celda.Offset(, 1) Or (celda.Column - rango.Column + 1) = rango.Cells.Count Then

        i2 = celda.Column

        CuentaB = CuentaB & (i2 - i1 + 1) & ", "

        i1 = i2

      End If

    End If

  Next celda

  CuentaB = Left(CuentaB, Len(CuentaB) - 2)

End Function


En la celda donde quieras el resultado (p.e. H2) escribe:  =CuentaB(A2:G2)


En el caso de que sea 'eso' pero NO lo quieras mediante una UDF, pasar el código a una Sub-rutina no debería suponerte problema.



Pregunta lo que no sabes, recuérdalo para cuando te pregunten y ofrece tu ayuda (reconforta).

Mi sitio_web con ejemplos Excel.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable