Lo que hay que entender es que el carácter absoluto de las referencias absolutas, tal y como se especifica en el $
no es absolutamente absoluto ;-)
Ahora que el trabalenguas está fuera del camino, permítanme explicar.
La absolutización sólo se aplica al copiar-pegar o rellenar la fórmula. Insertar filas por encima, o columnas a la izquierda, de un rango referenciado de forma absoluta "desplazará" la dirección del rango para que el datos el rango señala sigue siendo el mismo.
Además, la inserción de filas o columnas en el medio del rango lo expandirá para abarcar las nuevas filas/columnas. Por lo tanto, para "añadir" una fila de datos a un rango (tabla) hay que insertarla después de la primera fila de datos.
La forma más sencilla de permitir añadir una fila de datos por encima de el rango de datos actual debe tener siempre una fila de cabecera, e incluir la fila de cabecera en el rango actual. Esta es exactamente la solución propuesta por cybernetic.nomad en este comentario .
Pero Todavía queda una cuestión más, y es la de añadir una fila de datos después del fin de la tabla. Escribir los nuevos datos en la fila posterior a la última fila de datos no funcionará. Tampoco lo hará insertar una fila antes de la fila después de la última fila.
La solución más sencilla para esto es utilizar una "última" fila especial, incluir esa fila en el rango de datos y añadir siempre nuevas filas insertando antes de esa fila especial.
Normalmente reduzco la altura de las filas y relleno las celdas con un color adecuado:
Para su ejemplo, la fórmula completa "más sencilla" sería, pues, la siguiente
=SUMIF(JUN!$G$1:$G$501,"Utilities",JUN!$H$1:$H$501)
Otra forma de conseguir el mismo objetivo es utilizar una fórmula dinámica que se ajuste automáticamente a la cantidad de datos de la tabla. Hay algunas variaciones diferentes de esto, dependiendo de las circunstancias exactas y precisamente lo que se va a permitir hacer a la tabla.
Si, como es el caso típico (su ejemplo, por ejemplo), la tabla comienza en la parte superior de la hoja de trabajo, tiene una cabecera de una fila, y los datos son contiguos sin espacios, una fórmula dinámica simple sería:
=SUMIF(INDEX(JUN!$G:$G,2):INDEX(JUN!$G:$G,COUNTA(JUN!$G:$G)),"Utilities",INDEX(JUN!$H:$H,2):INDEX(JUN!$H:$H,COUNTA(JUN!$G:$G)))
Esta es una solución mejor que utilizar INDIRECT()
como
- No es volátil y, por lo tanto, la hoja de cálculo es más rápida, y
- No se romperá si insertas columnas a la izquierda de la tabla.
La técnica de las fórmulas dinámicas puede mejorarse aún más si se utiliza en un Fórmula de nombre .
Por supuesto, el mejor solución es convertir la tabla en una Tabla propia y utilizar referencias estructuradas .
1 votos
¿Qué ocurre si se utiliza
=SUMIF(JUN!$G$1:$G$500,"Utilities", JUN!$D$1:$D$500)
? Presumiblemente fila1
es una cabecera de columna y, por lo tanto, nunca será utilizada por elSUMIF
y si luego se inserta una fila entre las filas1
y2
la fórmula seguirá estando bien0 votos
@cybernetic.nomad Te diré lo que pasa. ¡Simplemente va a funcionar! Como por arte de magia ;-) (A menos que, por supuesto, la cabecera en
G1
esUtilities
y la cabecera enD1
es un número. En ese caso tendrás todo lo que te mereces :-D)0 votos
@cybernetic.nomad Eso me funcionó y fue la solución más fácil en mi caso. Sigue cambiando los incrementos de 500, pero da igual, era arbitrario de todos modos