Con las hojas de cálculo de Google, puede escribir consultas . Sin embargo, si tiene letras de columna entre comillas, entonces no se actualizan a medida que cambia el orden de las columnas.
¿Hay alguna forma de escribir estas consultas para que no necesiten actualizarse cada vez que se agrega o elimina una columna?
¿Es posible usar rangos con nombre en las consultas para resolver este problema?
Aquí hay un ejemplo: si agrega una columna después de 'F', la columna 'G' se desplaza a 'H' y el significado de la fórmula cambia.
= Consulta (B: J, "seleccionar grupo promedio (J) por G")
Preguntas relacionadas
Esta pregunta no es lo mismo que Usar consulta con encabezados de columna en lugar de letras de columna porque esta se centra en el uso de rangos con nombre.
Sí, podría usar rangos con nombre en lugar de encabezados de columna incorporados, pero la idea básica es la misma que otras respuestas a esto y otras preguntas similares en este sitio sugirieron: la hoja de cálculo debe configurarse para construir una cadena dinámica de SQL .
Digamos eso
J
yG
corresponde a rangos con nombreGrades
yClass
respectivamente.El siguiente enfoque funciona solo cuando las columnas están entre las columnas A y Z
CELL("address",Grades)
devolverá"$J:$J"
. Para obtener la referencia de columna, useMID(CELL("address",Grades),2,1)
get"J"
. La fórmula final esEl siguiente enfoque funciona para todos los casos.
COLUMN(Grades)
devolverá un número entero (un número de la forma 1,2,3, etc.) Para simplificar la fórmula para crear el argumento de la declaración SQL, sugiero forzar a SQL a usar referencias de columna de la forma COL1, COL2, etc. mediante el uso de la matriz notación ({B:J}
). La fórmula final esHoja de cálculo de demostración
Referencias
Uso de matrices en Hojas de cálculo de Google - Ayuda de editores de Documentos de Google
fuente
La respuesta de Ruben no resuelve el problema en todos los casos porque
MID(CELL("address",Grades),2,1)
falla si elGrades
rango se mueve a una columna de doble letra como$AA:$AA
.En ese caso,
MID(CELL("address",Grades),2,2)
se necesita la fórmula . Para los rangos con nombre que abarcan o linda con el$Z:$AA
rango, esta fórmula se vuelve problemática.La fórmula
REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")
resuelve el problema para el caso general, pero cuestiono fuertemente su eficiencia de CPU cuando se usa en una hoja de cálculo grande.fuente
Encontré esta página en infoinspired.com que explica una forma de hacerlo. Lo probé exactamente como en el ejemplo que dio y funcionó. La puesta en marcha:
Su explicación de F1: la fórmula DIRECCIÓN que incluye las funciones FILA y COLUMNA devuelve la dirección de celda de B1. La función IZQUIERDA extrae la primera letra que es el encabezado de la columna.
--- Haga clic en la celda F1 y luego vaya al menú Datos> Rangos con nombre y nombre el rango "Edad" (sin comillas)
Ahora puede formular su consulta como:
=QUERY(A:B,"Select "&Age)
Tiene ejemplos más complicados en su página que estoy a punto de probar ahora, ¡pero me alienta que el primer ejemplo funcionó!
Editar: perdón si esto es exactamente lo que otros han estado proponiendo con sus respuestas. Acabo de encontrar este ejemplo claro como el cristal y pude resolverlo. Pensé que podría ayudar a otros con la misma pregunta.
fuente