Utilizar sumar.si en excel

Hola experto. Hace unos días puse esta pregunta en el tablón. No se si he hecho algo mal o no la he explicado bien. El caso es que no he recibido respuesta y me ayudaría mucho si me puedes echar una mano.
Tengo un libro de hojas en el que quiero que, cada una de ellas me recoja los datos que importo para cada día del mes (de la 1 a la 31), en el que están los datos sobre diferentes cuestiones de todos los trabajadores, y en otra haga un resumen de los datos que quiero analizar para cada trabajador y cada día del mes.
Para eso quiero utilizar suma.si y quiero automatizar (sin tener que estar retocando la fórmula cada vez) el cálculo de los datos. Como a cada hoja le he puesto como nombre el día del mes (1 a 31) quería que la fórmula suma. Si('1! '...) Se fuera adaptando, calculando en cada celda de la fila, y me fuera aportando los datos del día 1,2,..., hasta el día 31.
Había intentado que SUMAR.SI('a$1!$E$12:$E$65;$B63;'a$1!$L$12:$L$65)para que la hoja de la que tomar los datos fuera un valor variable y se adaptara al encabezado 1,2,... 31. Pero me devuelve error. 
El problema es que las hojas de los datos diarios no tienen siempre las mismas filas y por lo tanto no ocupan la misma posición.
Puede ser que un día trabaje el empleado 2 pero no lo haga en los tres días siguientes.
Por eso se me ocurrió utilizar sumar. Si., para que cuando no haya datos de él me devuelva un 0 y no me de un error de fórmula.
Lo que si me ocurre es que las hojas siempre dan la misma información (columnas) en la misma posición. Como eso es lo que quiero tener junto, para poder analizar, me parecía que sumar.si era una buena fórmula. Pero quizá me puedes orientar hacia otra cosa.
¿Cómo lo puedo conseguir?
Muchas gracias

3 respuestas

Respuesta
1
Te pongo un ejemplo que no se si es lo que estas buscando
Con esta macro sumas todos los valores de la columna B, de cada hoja si en la columna A esta el nombre de Pablo
Sub sumar_de_todas_las_hojas()
Dim suma As Double
Dim wsheet As Worksheet
suma = 0
For Each wsheet In Worksheets
        For i = 1 To 500
        If wsheet.Cells(i, 1).Value = "Pablo" Then
        suma = suma + wsheet.Cells(i, 2).Value
        End If
        Next i
Next
MsgBox "la suma es:" & suma
End Sub
Si es algo así lo que buscas, creo que modificando esta macro puedes llegar a la solución, cualquier duda me avisas.
Respuesta
1
A pesar de tu explicación es complicado para mi saber lo que realmente quieres. Cuando dices que la fórmula se vaya adaptando a cada hoja, ¿qué significa? ¿Qué escribes en algún lado el nombre de la hoja y la función depende de ello?
¿Puedes poner un ejemplo sencillo, quitando la notación $ para facilitar la lectura?
Si yo quiero tener en la celda A1 el nombre de la hoja y en B1 el resultado de la suma de las celdas D1:D10 de la hoja indicada en A1 que son mayores que 10 haría escribiría en B1:
 =SUMIF(INDIRECT(A1&"!"&"D1:D10");">10")
Y por facilidad, pondría los nombres de las hojas en algún rango de modo que pudiera hacer que A1 fuera un desplegable con los nombres de las hojas a escoger.
Respuesta
1
La función SUMAR. SI necesita una condición. Es decir, tienes que decirle que te sume POR en función de lo que pase en la celda que quieras.
=SUMAR.SI(Hoja1!C1:C6;">2")
Con esta fórmula, en una celda te sumaria todos los resultados mayores de 2, de la hoja 1.
Con lo que le tienes que dar el nombre de la hoja, pero también el rango de celdas que quieras que te sume. En la fórmula que has mandado, están los rangos pero no hay ninguna condición.
Por lo que me dices, como, si no tiene actividad, no quieres que lo sume, no hará falta ponerle condicón SUMAR. SI con lo que igual puedes utilizar el SUMAR, porque si da 0, tampoco va a variar el resultado.
Espero haberte entendido/ayudaddo. Si no, dímelo y miraré de ayudarte mejor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas