Macro para repartir valores en columnas
Buenos días. En primer lugar quería agradeceros por la ayuda que nos prestáis. Muchas de mis dudas las he resuelto mirando preguntas de esta web.
Quería plantearos una duda con una macro que me está volviendo loca.
La macro funciona a modo de organizador de trabajo.
En las primeras columnas (B, C) está el nombre del proyecto y el tiempo de actividad que hay que hacer por orden de prioridad.
Luego siguen las columnas de los días del mes en cuestión (1-30, el ejemplo es noviembre). Al final (columnas AH y AI) están las columnas que contabilizan el tiempo invertido en cada actividad.
En las filas 3 a 22 están los proyectos en los que repartiremos el tiempo. En las filas 23 a 25 están otro tipo de días que no cuentan para el trabajo (vacaciones, fin de semana, etc). La fila 26 es la suma del tiempo invertido cada día.
Considerando que el tiempo está en forma de "fracción de jornada laboral", siendo 1 la jornada laboral completa, y sabiendo que la menor división de ese tiempo es una fracción de 0.1, el funcionamiento es el siguiente:
En la columna AI (ColPeso) se pone la fracción de tiempo que suponen las distintas actividades. En las filas 23 a 25, se ponen los días que son festivos y vacaciones (se coloca un 1).
Al apretar el botón "repartir tiempo" lo que hace la macro es lo siguiente: toma el primer día, y comprueba si está completo (por ejemplo, con vacaciones). De ser así, pasa al siguiente día. Si aún no está completo, va añadiendo porciones de 0.1 hasta que bien llegue al final de una tarea, en cuyo caso pasaría a seguir completando tiempo con la siguiente tarea, o bien llegue a finalizar el día (suma 1). Así se van separtiendo las tareas a lo largo de los días.
Bueno, pues el código no me funciona. Depende de los días que tenga que completar, a veces mete 1.1 en cada día, a veces excede el tiempo de cada tarea. Lo malo es que es aleatorio, no he conseguido distinguir ningún patrón de fallo.
De momento hay detalles (como asegurar que el tiempo no excede los días del mes) que dejaré para más adelante.
Disculpad si me he extendido mucho, quería que estuviera claro el caso.
Aquí dejo el código, y si alguien lo necesita, puedo adjuntar el archivo. Muchísimas gracias por adelantado.
Sub RepartirTiempo()
Dim Dia As Integer 'columna
Dim Fila As Integer
Fila = Range("FilaIni").Row 'se coloca en el primer proyecto
For Dia = Range("ColIni").Column To Range("ColFin").Column 'repasa todos los días
If ActiveSheet.Cells(Range("FilaSuma").Row, Dia).Value <> 1 Then 'sólo se mete en el bucle si el día está incompleto
Do While ActiveSheet.Cells(Range("FilaSuma").Row, Dia).Value < 1
If ActiveSheet.Cells(Fila, Range("ColSuma").Column).Value < _
ActiveSheet.Cells(Fila, Range("ColPeso").Column).Value Then
ActiveSheet.Cells(Fila, Dia).Value = ActiveSheet.Cells(Fila, Dia).Value + 0.1 Else
Fila = Fila + 1
End If
Loop
End If
Next Dia
End Sub
Quería plantearos una duda con una macro que me está volviendo loca.
La macro funciona a modo de organizador de trabajo.
En las primeras columnas (B, C) está el nombre del proyecto y el tiempo de actividad que hay que hacer por orden de prioridad.
Luego siguen las columnas de los días del mes en cuestión (1-30, el ejemplo es noviembre). Al final (columnas AH y AI) están las columnas que contabilizan el tiempo invertido en cada actividad.
En las filas 3 a 22 están los proyectos en los que repartiremos el tiempo. En las filas 23 a 25 están otro tipo de días que no cuentan para el trabajo (vacaciones, fin de semana, etc). La fila 26 es la suma del tiempo invertido cada día.
Considerando que el tiempo está en forma de "fracción de jornada laboral", siendo 1 la jornada laboral completa, y sabiendo que la menor división de ese tiempo es una fracción de 0.1, el funcionamiento es el siguiente:
En la columna AI (ColPeso) se pone la fracción de tiempo que suponen las distintas actividades. En las filas 23 a 25, se ponen los días que son festivos y vacaciones (se coloca un 1).
Al apretar el botón "repartir tiempo" lo que hace la macro es lo siguiente: toma el primer día, y comprueba si está completo (por ejemplo, con vacaciones). De ser así, pasa al siguiente día. Si aún no está completo, va añadiendo porciones de 0.1 hasta que bien llegue al final de una tarea, en cuyo caso pasaría a seguir completando tiempo con la siguiente tarea, o bien llegue a finalizar el día (suma 1). Así se van separtiendo las tareas a lo largo de los días.
Bueno, pues el código no me funciona. Depende de los días que tenga que completar, a veces mete 1.1 en cada día, a veces excede el tiempo de cada tarea. Lo malo es que es aleatorio, no he conseguido distinguir ningún patrón de fallo.
De momento hay detalles (como asegurar que el tiempo no excede los días del mes) que dejaré para más adelante.
Disculpad si me he extendido mucho, quería que estuviera claro el caso.
Aquí dejo el código, y si alguien lo necesita, puedo adjuntar el archivo. Muchísimas gracias por adelantado.
Sub RepartirTiempo()
Dim Dia As Integer 'columna
Dim Fila As Integer
Fila = Range("FilaIni").Row 'se coloca en el primer proyecto
For Dia = Range("ColIni").Column To Range("ColFin").Column 'repasa todos los días
If ActiveSheet.Cells(Range("FilaSuma").Row, Dia).Value <> 1 Then 'sólo se mete en el bucle si el día está incompleto
Do While ActiveSheet.Cells(Range("FilaSuma").Row, Dia).Value < 1
If ActiveSheet.Cells(Fila, Range("ColSuma").Column).Value < _
ActiveSheet.Cells(Fila, Range("ColPeso").Column).Value Then
ActiveSheet.Cells(Fila, Dia).Value = ActiveSheet.Cells(Fila, Dia).Value + 0.1 Else
Fila = Fila + 1
End If
Loop
End If
Next Dia
End Sub
1 Respuesta
Respuesta de santiagomf
1