Una de las preguntas más frecuentes relacionadas a Google Sheets es como hacer para generar informes o filtros con una fórmula.
La respuesta puede estar en QUERY, una de las funciones más poderosas y versátiles que nos ofrece Google Sheets.
Que es la función QUERY
QUERY es una función exclusiva de Google Sheets que filtra y resume de la manera que queramos, la información de alguna (o varias) de nuestras hojas de cálculo.
Query en español significa consulta, y esta basada en la función QUERY del lenguaje MySQL, el cual se usa para manejar bases de datos.
Por eso, cuando te enfrentes por primera vez a esta función, si nunca has tenido acercamientos con MySQL, se va a sentir raro. Es totalmente distinta a cualquier otra función de Google Sheets o Excel.
Es una función muy poderosa y muy flexible que permite hacer muchas cosas, pero por ahora veremos sus versiones mas básicas.
En la academia de Automatización JuanSGuzmán encontrarás un curso paso a paso del uso de la función QUERY, así como un curso avanzado de la misma.
Ejemplo de la función QUERY
Digamos que tenemos la siguiente fuente de datos:

En resumen, es una serie de registros que cuenta, entre otros, con los siguientes campos:
- Segmento
- País
- Producto
- Ventas
- Costo
- Utilidad
- Fecha
Ahora quiero poder mostrar en un informe solo algunos de estos datos. Por ejemplo me gustaría ver el país, el producto y las ventas.
Pero adicionalmente podría querer ver estos campos solo para una o dos categorias específicas
Y por ultimo, me gustaría poder ordenarla por ventas de mayor a menor.
Y de pronto me gustaria solo ver los campos con las 5 mayores ventas.
También podría querer ordenarlo por fechas.
Todo esto lo puedo hacer con una sola función: QUERY.
En este primer ejemplo queremos llegar a lo siguiente:

Es decir, vamos a ver solo 4 campos: Segmento, País, Producto y Ventas.
Adicionalmente vamos a filtrar los campos que tengan el segmento “Gobierno” y el país “Alemania”
La función se vería así:
=QUERY(Datos!A1:M701;”SELECT A,B,C,H WHERE A=’Gobierno’ AND B=’Alemania'”;1)
Pero no te asustes, ya veremos esta función en detalle.
Función QUERY básica
Empecemos por la forma más básica de QUERY. Sería así:
=QUERY(“Datos!A1:M701;”SELECT *”;1)
Entonces, la función tiene tres componentes, así:
=QUERY(Fuente de datos, Consulta, Encabezados)
Veamos las tres partes en detalle
Fuente de datos
La fuente de datos es nuestra tabla de origen, la cual puede estar en la misma hoja, en otra hoja e inclusive en otro archivo. Hasta podría “construirla” con varias fuentes con la ayuda de la función arreglo {}, pero eso lo dejamos para otro día.
Puede ser un rango directo como A1:L20, un rango infinito como A1:L, un intervalo con nombre o una fórmula que nos arroje un rango.
Encabezados
Voy en desorden, porque dejo la mas importante de ultima.
Encabezados simplemente me dice si traigo o no encabezados.
Normalmente es 0 o 1, donde 0 es que no traiga los encabezados de la tabla de origen, y 1 es que traiga el encabezado.
Esto dependerá de cada caso específico. En nuestro caso, como la fuente de datos tiene encabezados y además queremos traerlo, podríamos “1”.
También la podríamos dejar vacía.
Consulta
Este es el corazón de la función QUERY y es la parte más complicada de entender, pero la que, después de trabajarla unas cuantas veces, dominaremos y nos dará el poder y la flexibilidad de esta función. Por eso dediquémosle una sección entera:
Consultas en la función QUERY
Consulta general
Si vemos el ejemplo anterior, la consulta (que siempre va en comillas) es:
“SELECT *”, que me arroja:

Vamos a ir “traduciendo” este lenguaje SQL poco a poco.
“SELECT *” quiere decir “Seleccione todo”.
Es la forma más general de QUERY, y lo que hace básicamente es copiar la fuente de origen. Crea un duplicado exacto.
Personalmente, siempre que construyo una función QUERY empiezo con “SELECT *” y poco a poco voy agregando condiciones adicionales.
También podemos dejar la consulta vacía, y sería el equivalente a “SELECT *”.
Así quedaría nuestra función:
=QUERY(Datos!A1:M700)
Filtrando columnas
Lo primero que podemos hacer es “decirle” a QUERY que solo nos muestre ciertas columnas
En nuestro ejemplo podemos entonces mejorar nuestra condición de la siguiente manera:
“SELECT A,B,F”

Entonces, sin ningún comando adicional, le estamos diciendo “Solo muestre las columnas A, B y F”.
Tengan en cuenta que el orden en que escriba las columnas es el orden en que las va a mostrar.
Esto me trae otra ventaja de QUERY y es que puedo reordenar mis columnas como quiera. Por ejemplo podría poner:
“SELECT F,A,D,B”

Lo que si no me permite es repetir columnas
Una Condición
Después de filtrar las columnas, puedo dar mi siguiente instrucción y es filtrar por alguna o varias condiciones de las filas.
Es importante observar que la columna de la condición no tiene que involucrar necesariamente una de las columnas que se muestre.
Por ahora no incluyamos las columnas, y solo mostremos todas las columnas, concentrándonos en las condiciones, volviendo a nuestro leal asterisco “*”.
Nuestra primera condición va a ser un país.
Quiero ver todos los campos cuyo país sea Canadá. Nuestro primer ejemplo entonces va a ser:
“SELECT * WHERE B=’Canadá'”

Nota: Si vas a mostrar todas las columnas, puedes omitir el comando SELECT. Quedaría así la consulta: “WHERE B=’Canadá”
Listemos entonces ciertas características de las condiciones
- Para estas condiciones siempre vamos a usar el comando “WHERE”.
- Vamos a proporcionar la columna donde queremos buscar la condición.
- Después vamos con un operador de comparación, en este caso “=”
- Por último damos la condición, la cual debe estar entre comillas sencillas.
Así como pusimos B=’Canadá’ podríamos poner C=’Carretera’ o A=’Gobierno’
Varias condiciones
Aquí empezamos a ver el gran potencial de QUERY, y es que puedo poner todas las condiciones que quiera.
Digamos que ahora quiero ver los registros del país “Alemania” y del producto “Montana”.
A la construcción actual tengo que agregarle el comando “AND” que me junta todas las condiciones. El ejemplo entonces sería:
“SELECT * WHERE B=’Alemania’ AND C=’Montana'”

Por último combinemos los filtros de columnas y de filas en una sola. Sería algo así:
=QUERY(Datos!A1:M701;”SELECT A,B,C,H WHERE B=’Alemania’ AND C=’Montana'”;1)

En la academia de Automatización JuanSGuzmán encontrarás un curso paso a paso del uso de la función QUERY, así como un curso avanzado de la misma.
Ordenar
Para terminar esta introducción de Query, donde vemos sus funcionalidades como una especie de “filtro dinámico”, vamos a ordenar nuestros datos, con la ayuda del comando ORDER BY.
A diferencia de WHERE, ORDER BY tiene dos argumentos: la columna que voy a ordenar y si va a ser de menor a mayor (ASC) o de mayor a menor (DESC)
Este comando siempre debe ir después de WHERE. En otras palabras: primero filtro y después ordeno.
Aunque puede darse el caso que no filtre y solo ordene.
En nuestro ejemplo, una vez filtrado por país y producto, ahora voy a ordenar por segmento de mayor a menor:
=QUERY(Datos!A1:M;"SELECT * WHERE B='Alemania' AND C='Montana' ORDER BY A DESC";1)

Limitar
Una última cosa que puedo hacer es limitar la cantidad de datos que muestre mi Query. Puedo por ejemplo mostrar solo 5, 10 o 26 resultados. Lo que yo quiera.
Para esto voy a usar el comando LIMIT, despues de WHERE y de ORDER BY.
Otra vez, podría no usar WHERE, ni ORDER BY y simplemente mostrar mi base maestra, pero solo los primeros 10 items, con el comando
LIMIT 10
Entonces si en nuestro ejemplo quisieramos filtar por pais y producto, ordenando por segmento y mostrando los primeros 15 resultados, nuestro código se vería así:
=QUERY(Datos!A1:M;"SELECT * WHERE B='Alemania' AND C='Montana' ORDER BY A DESC LIMIT 15";1)

Siguientes pasos
Esto es solo el abrebocas a lo que puede hacer QUERY.
Entre las cosas que nos quedan por explorar estan:
- Dar nuevos nombres a las columnas
- Campos calculados
- Agrupar por filas
- Agrupar por columnas
- No mostrar ciertas filas
- Trabajar con fechas
- Hacer “Subqueries”
- Hacer queries dinámicas, con filtros del usuario.
Todo esto lo iremos viendo en artículos posteriores.
Conclusión
Hasta ahora estamos rozando la superficie de lo que podemos hacer con la función QUERY, pero sinceramente creo que es una función a la que debemos ir acercándonos poco a poco hasta dominarla.
Por ahora te invito a practicar con alguna de tus bases, para así, ir familiarizándote con esta magnífica función.
Hola una consulta si quiero hacer que en el query una columna no sea igual a un solo valor, es decir que busque en un listado y me entregue las filas de los datos que extraigo, donde una columna coincida con varios valores de otra hoja de datos.
Por ejemplo tengo una base de datos de muchos clientes y aparte tengo una hoja con el id de algunos clientes , entonces quiero que me muestre todas las filas donde la columna 3 coincida con los id de los clientes de otra hoja.
Query (Datos 1; “WHERE Col3='”&lista clientes! A2:B&”‘”)
Hola
En SQL eso se hace con la claúsula IN, pero no existe en SQL
Lo puedes hacer con esta clausula “WHERE A matches ‘”&A1&”&”|”&A2&”‘”
Algo asi. puedes jugar con la funcion TEXTJOIN para usar toda una lists
Saludos!
Buenas!! Se puede filtrar sólo los números positivos de una columna? Tengo columnas con positivos y negativos, no doy con la expresión para tener solo las positivas en un reporte. Gracias!!
Hola!
WHERE A>0 ?
Saludos!
Hola Juan
Magnifico tus tutoriales de como utilzar QUERY. Tengo un problema al hacer una consulta y es que me cambia el formato de numero a texto de toda la columna, situacion que imposibilita hacer operaciones matematicas.
Hola!
Puedes forzar la columna a numero con la función N, asi
{ArrayFormula(N(A1:A)\B1:B}
Saludos!
Hola Juan, muchas gracias por el texto, muy completo. Tengo una duda, es posible que pueda filtrar de una sola columna dos condiciones. Ejemplo, en la columna Pais quiero traer los registros de Argentina y Brasil.
Hola!
Hay dos maneras
La mas comun es con OR
WHERE A =’Argentina’ OR A=’Brazil’
Saudos!
Hola Juan! Primero que nada MUCHÍSIMAS GRACIAS por compartir tu conocimiento. Super claro y didáctico, fue de gran utilidad para mi en serio.
Quería hacerte una consulta a ver si podrías ayudarme…
Estoy consolidando 2 bases de datos DISTINTAS (tienen diferentes columnas por eso no se pueden juntar!). Las uní con un arreglo mediante \ ( uniendo por columnas)
El problema es que yo en ambas bases de datos utilizo la función QUERY ya que estoy agrupando los datos por semana, y haciendo cálculos de SUMAS por semana.
Cuando las uno, sólamente puedo unirlas si repito la columna “semana” en cada arreglo.
Es decir, se imprime : semana |ventas A| ventas B| semana | registros
Hay alguna forma de consolidar los datos mediante el criterio (semana) y que aparezca una sola vez? o la solución sería ocultar la columna ??
Aguardo respuesta ! Muchas gracias 🙂
Hola!
Mil gracias por las palabras
Creo que no entiendo bien tu caso.
Si me puedes poner un par de pantallazos o ejemplos de la tabla mejor
Saludos!
Hola, la condicion puede ser el contenido de una celda en lugar de un texto?
ej: WHERE Col1 = “DATA!$A$2” AND Col2 = “HTTP … PL!$B$3”
Gracias
Hola!
Claro que si
Tienes que cerrar ” y usar & para unir
Algo asi
“WHERE A='”&B2&”‘”
Saludos!
Hola jsguzmanb, buen articulo. Recién estoy descubriendo QUERY.
mi pregunta es la siguiente:
Que diferencia o ventaja hay entre usar QUERY en vez de una TABLA DINAMICA ?
Hola! Es mucho más flexible el QUERY, pero es mucho más fácil de usar la tabla dinámica. En el QUERY puedes controlar el formato y los encabezados directamente desde la fórmula y puedes hacer unos filtros muy avanzados con WHERE
Saludos!
Hola, tengo una duda. Le he dado vueltas y no me sale. Para traer celdas “no vacías” sería usar Where celda IS NOT NULL. Si quiero traer las celdas vacías, cómo sería? probé con IS NULL y no me funciona
HOla!
A IS NULL te deberia funcionar
Saludos!
=Query({Income!A:E;’Fixed expenses’!A:E;’Other expenses’!A:E}, “Select * Where NOT Col1 is Null ORDER by Col1 ASC”, 0)
me marca un error, no se que sea?
Es mejor que uses una sola convención de mayusculas y minusculas para asegurarte que no es eso
«SELECT * WHERE Col1 IS NOT NULL ORDER BY Col1 ASC»
Saludos!
Cual es la función del 1 o del 0 al final
Tomar los encabezados como encabezados (1), o como datos (0)
Saludos!
Muy buenos comentarios
Tengo una consulta, donde tengo una columna que tiene datos numericos y texto, aplique el formato texto sin formato a todas las columnas de la tabla origen, pero en la fuente trae algunas y otras no, que podria ser?
Hmmm
Habría que ver los datos
Saludos!
Hola. Antes que nada, la explicación es súper clara en un tema que no es simple. Te lo agradezco muchísimo.
Quiero consultarte algo, explicaste que se pueden usar referencias a una celda para las condiciones, pero necesito usar una para el LIMIT. Lo hago de la siguiente forma y no lo toma. Esto es para que la cantidad de registros sea variable, quizás con una celda que tenga una validación de datos con la cantidad.
=QUERY(Datos!A1:F;”SELECT A,B,C,F WHERE B contains ‘”&LEFT(B43;FIND(” “;B43)-1)&”‘ AND F>4 ORDER BY C DESC LIMIT ‘”&F40&”‘”;1)
Espero puedas ayudarme, un saludo cordial.
No tienes que ponerle comillas sencillas al limit ya que es un número
Saludos!
Hola, muy buena la explicación. Ahora bien, se puede crear una función aparte, la cual me genere una salida tipo texto y anexarla en Query.
Por ejemplo:
Función: BuscarV(a2; g:h; 2; 0) (esto me devuelve la letra de referencia “F”
Luego concateno:
Concat: “select ” & Función
Y la anexaría en Query como
Query(“datos!a2:b”; concat)
Aquí me genera un error
Hola!
Esa concatenación se hace on la función arreglo {}
Saludos!
Hola Juan! Lo primero muchas gracias por todo el contenido que publicas, ultimamente utilizo mucho google sheets en el trabajo y me viene genial! Te quería hacer una consulta….
Estoy utilizando la función Query para traerme los datos de otro fichero, con la condición de que una celda coincide con el número de pedido que yo le doy. Un ejemplo:
Query(Hoja y Rango; “select * where Col1 is not null and Col3 contains ‘1183’”;1)
Con ese ejemplo funciona perfectamente. El problema es que los números de pedido que utilizo para buscar, ahora han cambiado al formato LCXXXX (p.e LC1041). Y con este formato la query no encuentra esa fila, y no trae ningún dato de vuelta.
He probado a cambiar el contains por Col3 = LC1041, pensando que puede tomar el dato como texto, al tener letras, pero tampoco funciona.
¿Alguna idea de lo que puede estar pasando?
Gracias y saludos!
Hola!
Intenta cambiar el formato de la columna de origen a “Texto sin formato”
Saludos!
Hola Juan, Muchas gracias por tomar el tiempo para contestar todas las dudas y por generar estos contenidos. Quisiera preguntarte si existe algún un límite en la cantidad de celdas que puede extraer Query cuando está una función Importrange anidada, porque tengo una base de datos de la cual intento extraer información hacia otra hoja de cálculo. La información que necesito extraer está en dos de las columnas del archivo origen siempre y cuando cumplan con las condiciones que se marcan en la fórmula, sin embargo sólo obtengo como resultado la información de la columna 1 y no de la columna 11.
El rango completo de búsqueda es de 11 columnas y 10114 filas (un total de 111254 celdas y contando…esta es la fórmula:
=QUERY(importrange(“1-6Kz2YTqxrSgBNLd3Sm4LP0K87kqIYNl5Y-CKwwA”,”Students!B:L”),”Select Col1,Col11 Where (Col5 = ‘”&O5&”‘) and (Col3 = ‘”&O7&”‘) and (Col4 = ‘”&R5&”‘) and (Col10 = ‘ACTIVE’) order by Col1 asc “,1)
Muchas gracias por la atención.
Puede ser un tema de formatos. Asegurate que la que es Col11, este con formato de texto
Saludos!
Buenos días,
Estoy haciendo una tabla aplicándole la función QUERY, quiero que solo me pase los datos que incluyen la palabra verdadero pero no me ha querido funcionar pues solo me pasa los encabezados y no se cual es el error.
Tengo la formula así:
=QUERY(VER!A1:R26406,”SELECT A, B, C, D, R WHERE R=’VERDADERO'”)
O en su defecto, como se pondría la formula para que solo pase los datos cuando tenga información en una columna, por ejemplo una fecha.
Muchas gracias
Hola Daniel
El problema se puede deber a que tienes el VERDADERO de Sheets, no un texto “VERDADERO”. puedes intentar con R=true
Para el segundo tema, si decimos que tu columna A es la fecha, puedes usar WHERE A IS NOT NULL
Me cuentas!
Un gran saludo!
Hola, tengo un problema, es un listado con número de jugadores y fechas, tengo el SELECT WHERE con las fechas funcionando, pero también quiero filtrar por jugadores, lo que hace que colapse y deje de funcionar tanto las fechas como la busqueda por número de jugador.
B3: Filtro número jugador
B4: Filtro fecha inicio
B5: Filtro fecha fin
=QUERY({BD!A:J},CONCATENAR(“SELECT * WHERE Col2= ‘2’ AND Col4 >= date ‘” &TEXTO(B4,”yyy-mm-dd”)& “‘ AND Col4 <= date '"&(TEXTO(B5,"yyyy-mm-dd")&"'")))
Hola Fausto
Asegúrate que Col2 es un texto. Si es un número, quítale las comillas sencillas
Me cuentas
Saludos!
Excelente explicación. Me ha servido para construir mi query. Sólo tengo un problema. Tengo dos columnas que son de texto y fechas cada una. La query me devulve la segunda bien; la primera cuando es texto me sale en blanco (las fechas bien). ¿Sabes a qué puede deberse? ¡Gracias!
Hola Octavio
Ya te respondí en el otro comentario
Saludos!
Hola, Juan: ¡Excelente explicación! Me ha ayudado mucho a construir mi query pero me da un pequeño problema.
=query(GLOBAL!A4:AE;”select B,C,D,AA,AB,AC,F,I,G,H,A,E”;0)
me devuelve todo bien excepto que la columna AA combina texto y fechas, no devolviéndome el texto (lo pone en blanco). La columna AB también tiene texto y fechas y no ocurre así: me devuelve el texto correspondiente o la fecha. ¿Sabes a qué puede deberse? ¡Gracias!
Hola Octavio
El tema con QUERY es que “adivina” que tipo de datos tiene cada celda
Por eso lo aconsejable es tratar de no mezclar tipos de datos en cada columna, porque si no, estamos a la merced de lo que crea QUERY. Mi sugerencia es que en la base de origen le apliques un formato de texto a todo
Me cuentas.
Saludos!
Muchas gracias por la info. El problema es que es una query que “chupa” de otra hoja que también es una query. He cambiado el formato en esa primigenia, pero sigue apareciendo igual. El documento original sí que no puedo modificarlo porque lo usan muchas personas.
No te preocupes. No queda tan mal 🙂
¡Un saludo!
PD: Disculpa que duplicara el comentario. No me aparecía.
Y si quiero que sólo traiga las celdas con texto? Es decir, tengo una columna en la que hay muchos huecos y alguna celda que sí tiene contenido. Si quiero que sólo traiga celdas que tengan contenido, ¿qué tengo que añadirle a la fórmula?
Hola Silvia
seria algo asi
QUERY(datos;”WHERE A IS NOT NULL”)
Saludos!
Un gran saludo!
Hola Juan buenos días.
Excelente explicación!. Quería preguntarte si es posible realizar la función Query para textos que no tengan una coincidencia exacta. Es decir, filtrar todas las lineas que contengan una palabra en común en una columna determinada.
Te agradezco mucho si me puedes ayudar
¡Saludos!
Hola Carlos
Aquí te dejo un video donde explico estos casos
https://youtu.be/TTV8JZj12Ps
Me cuentas si te sirve
Saludos!
Hola Juan,
Excelente explicación. Una pregunta, es posible realizar la función Query sin tener una coincidencia exacta. Es decir, filtrar todos las filas que contengan una palabra en común.
Gracias!
Hola Carlos
Claro que si
Aquí te dejo un video donde lo explico
https://youtu.be/TTV8JZj12Ps
Un gran saludo!
Hola! me sale un error cuando concateno 2 query para unir los datos. El error es el siguiente:
“No se puede analizar la cadena de la consulta para En la función QUERY, el parámetro 2: NO_COLUMN: Col1″
a qué se debe?
esta es mi fórmula:
={QUERY(FB!A2:W;”SELECT Col1,Col2,Col3,Col5,Col8,Col9,Col15,Col16,Col17,Col18,Col19,Col20,Col21,Col22,Col23″);QUERY(YT!A2:W;”SELECT Col1,Col2,Col3,Col4,Col5,Col6,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col18,Col19”)}
ojalá me puedas ayudar
Hola!
La denominación Col1,Col2, etc solo te va a funcionar cuando la fuente de datos sea un arreglo o el resultado de una función.
Lo solucionas envolviendo los rangos en arreglos asi:
={QUERY({FB!A2:W};»SELECT Col1,Col2,Col3,Col5,Col8,Col9,Col15,Col16,Col17,Col18,Col19,Col20,Col21,Col22,Col23″);QUERY({YT!A2:W};»SELECT Col1,Col2,Col3,Col4,Col5,Col6,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col18,Col19»)}
Me cuentas
Saludos!
¡Buenos días!
Tengo una consulta que hacerte…Siguiendo tu explicación y toda la ayuda de los comentarios….sigo sin poder tener una expresión correcta.
Mi intención es que mediante una query me aparezca una suma de un importe en un rango de fechas concreto, esta es la expresión que tengo actualmente:
QUERY(QUERY((importrange(“tabla datos”;”Facturación Encargos 3b!A:N”);”SELECT A, SUM N GROUP BY A”;1);”WHERE col14>= date ‘2021-09-01’AND col14= date ‘2021-09-01’ AND A<= date '2021-09-16'";1)
*Fuente de datos: Tabla datos (otra hoja de cálculo diferente)
*A=CAMPO FECHA
*N= CAMPO IMPORTE (col14)
Lo que quiero es que me sume el importe entre el 01/09/2021 y el 16/09/2021, y me dé un valor único.
¿Que tengo que corregir o hacer?
Hola!
Primer cambio:
Cambia “col14” por “Col14”
Me vas contando
Saludos!
Hola Juan,
Primero quiero agradecer todo tu contenido compartido en la web y youtube me salvo infinidad de veces y eso no tiene precio. ¡Gracias!
Quería realizarte una consulta:
Tengo una query realizada que me ocupa en la hoja de la columna A a la G
=query(‘Base sin datos’!A5:H;”SELECT A,B,C,D,E,F,G WHERE H=’Norte'”;1)
Luego las columna H tiene un desplegable que se completa en base a un dato de la query, pero tengo un problema. Detecte que si ordeno los datos de la hoja “Base sin datos” (donde tomo la información para la query) se ordena la información de la query pero no se modifica el orden de la columna H.
¿por qué me sucede este?
Desde ya te agradezco tu ayuda.
Saludos,
Yesica.
Hola Yesica
No se si viste este video, de pronto te da ideas
https://youtu.be/CMvKw1TAi9I
Saludos!
Hola que tal, al hacer un query a una columna con datos numericos y texto, cuando se hace la consulta unicamente me trae los datos que son numericos y los string me los manda como si estuvieran vacios, que puede ser?
Hola Jorge
El tema es que QUERY “decide” que la columna es una de las dos: o texto o números
Una solución es coger la columna original y darle a todo formato de texto
Saludos!
Hola Juan! Gracias por todo el contenido, me está ayudando mucho.
Estoy utilizando la función query + importrange y funciona perfectamente, pero estoy teniendo problemas a la hora de meter una referencia a una celda dentro del “where”, para que la condición sea dinámica.
Así funciona sin problemas:
=query(importrange(“codigoID de la hoja origen”;”Puntos de Venta!A:Z”);”select * where Col1 is not null and Col7=’NombreComercial'”;1)
Y al poner la referencia me da error y no veo por qué:
=query(importrange(“codigoID de la hoja origen”;”Puntos de Venta!A:Z”);”select * where Col1 is not null and Col7='”&Hoja pedido!M2&”‘”;1)
Alguna idea? Gracias!
Hola Pedro
Tu formula esta perfecta. Lo unico es que como tu pestaña es una frase debes ponerle entre comillas simples
‘Hoja pedido’
Saludos
Un gran saludo!
Hola!!
Estoy usando la formula query pero quiero poner un condicional en porcentaje pero me sale error. Lo que hago es los siguiente: =query(‘Payment Support’!A1:Q;”select A,B,C,D,E,F,G,J,K,Q WHERE I=100%”;1)
¿Me puedes ayudar?
Hola Rebeca
Cambia el 100% por 1 y te debería funcionar
Un gran saludo!
Muchas gracias. Tenía problemas con el mismo tema.
Quiero sumar las ventas agrupadas por modelos de ropa y filtrar a todas las que dan como resultado 1 durante lo que va del año.
Hola Jorge
Sería algo asi:
Asumiendo que la Col A es la de los modelos, y B la de las ventas
=QUERY(QUERY(datos;”SELECT A,SUM(B) GROUP BY A);”WHERE Col2=1″)
Un gran saludo!
buenos días para texto debería ser así =QUERY(‘Biología’!C4:D18,»SELECT D WHERE C ='”&C5&”‘,0) , van primero comillas simples , luego comillas dobles. Espero haberte ayudado saludos
Muchas gracias por el contenido. Aprovecho para hacer la siguiente consulta:
=QUERY(‘Biología’!C4:D18,”SELECT D WHERE C =”&C5&””,0)
Al realizar esta consulta siendo C5 un texto, me devuelve error, si sustituyo C5 por un nombre de los incluidos en la columna C entonces si funciona correcto pero no al usar la celda que corresponde.
Agradezco cualquier ayuda.
buenos días para texto debería ser así =QUERY(‘Biología’!C4:D18,»SELECT D WHERE C ='”&C5&”‘,0) , van primero comillas simples , luego comillas dobles. Espero haberte ayudado saludos
ufff jsguzmanb, que pagina, wauuu para mi despues muchos años, haberla encontrado maximo, desde que estaba app script, con deseos de hacer, cosas, la mejora de grabar macro, pero por falta de idioma ingles no logre sacarle proveecho, para beneficio, mio, hoy con tu pagina he logrado lo que habia deseado.
mi objetivo es consolidar en una sola hoja, el contenido de otros archivos en donde su estructura es igual.
lo hice con importrange pero deseo hacerlo desde appscript y a la vez poder parametrizar que registros traer, asi como funciona el query.
la idea mia es tener una opcion de menu (ya lo tengo) en donde este importar datos., y llame mi fucion appscript, pueda copiar datos de un libro a otro, pero usando filtros por registro.
aspiro haber expuesto bien la duda
Mil Gracias.
Hola!
Mil gracias por tus palabras!
Aquí te dejo un video que te puede dar ideas. No se conecta con archivos…tengo pendiente ese video
https://youtu.be/7xL3ofaxIVw
Saludos!
Hola , no logro que el query se desplegue si cumple alguna de las dos condiciones
=QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/1L0atzUxQB9yDLns-Pogv6KlhHmHLqOk9KluJwd_eGAY/edit#gid=1237889533″,”historial listas!A:F”),”SELECT * WHERE Col1=”&B1&” OR Col2 CONTAINS'”&D1&”‘”,0)
Col1 = numero
Col2=texto
gracias
Hola!
Te respondí en el otro comentario
Saludos!
buenas no logro que el query me cumpla una de las dos condiciones adjunto el código utilizado
=QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/1L0atzUxQB9yDLns-Pogv6KlhHmHLqOk9KluJwd_eGAY/edit#gid=1237889533″,”historial listas!A:F”),”SELECT * WHERE Col1 =”&B1&” OR Col2 Contains ‘”&D1&”‘”,0)
B1 ES NÚMERO (col1)
D1 ES TEXTO (Col2)
Hola Jason
Te debería funcionar
Pruebalo primero con valores fijos a ver si tienes algún tema con las referencias
Saludos!
Hola, me arroja el error #N/A , porque no hay datos en la columna a consultar, como puedo lograr que me muestre los otros datos ?
=QUERY(IMPORTRANGE(“1QMt8gvmdgR-iLPa6uzCEzD0tHTYUnJmJWqRnHGyikVM”,”Respuestas de formulario 1!A:EG”),”select Col82, Col48, Col3, Col10, Col6, Col20, Col27, Col31 WHERE Col82 = ‘7° básico'”,0)
Hola Samuel
No entiendo bien tu pregunta
Un gran saludo!
Hola Pablo.
Excelente formula para usar en mis análisis
Una duda, como podría traer información de una misma columna como condición.
Por ejemplo quiero que me traiga de la columna B , cuando son los paises de España e Italia
Mil gracias de antemano
Hola Cristina
Usa la clausula OR
Saludos!
Hola,
Tengo datos de la A hasta la CX, cómo puedo indicarle que me traiga todas esas columnas en lugar de poner una por una.
Algo así como SELECT A,C, D HASTA CX.
Además, Quiero que solo traiga datos que en las columnas D hasta la CX contengan “Pendiente”.
Sería algo como WHERE D HASTA CD = ‘Pendiente’
Gracias,
Hola Pablo
Desafortunadamente no hay manera de hacerlo como lo pides. Usando en vez de las letras la notacion Col1 nos podemos inventar un ciclo que haga Col1,Col2,Col3…etc.
Es la unica forma
Un gran saludo!
Hola, Al traer esta información de mi libro todo corre bien pero me da una notificación.
La cual dice que necesito usar un navegador web de escritorio para conectar está hoja.
Habrá alguna solución ya que solo mi Smartphone tengo para trabajar.
Saludos…
=QUERY(IMPORTRANGE(“https://docs.google.com/spreadsheets/d/1mdVSTKEsSSj7-xm4xz_orsy_oxxtPG6PR60yL3CRjsw/edit?usp=drivesdk”,”Sheet1!A1:A10″))
Hola!
Solo necesitas conectarte una vez desde un computador, darle “permitir” y ya lo puedes usar sin problema en tu movil
Saludos!
Hola,
Tengo una duda: estoy utilizando QUERY para unir dos tablas con los mismos campos, pero hay una columna donde los datos mayormente son numericos, pero de vez en cuando hay datos tipo texto pero el query no me trae dicha información (me deja la celda en blanco).
Como podría solucionarlo?
Formula:
=IFERROR(QUERY({
IMPORTRANGE(“DatosA!$A1:$AQ”);
IMPORTRANGE(“DatosB!$A2:$AQ”)
},
“select * where Col1”order by Col2 asc”),””)
Gracias de antemano.
Hola Gabriel
El QUERY esta bien
Vete a tus datos, selecciona la columna y cámbiale el formato a texto
Me cuentas si te sirve
Saludos!
Hola,
Tengo una duda: estoy utilizando QUERY para unir dos tablas con los mismos campos, pero hay una columna donde los datos mayormente son numericos, pero de vez en cuando hay datos tipo texto pero el query no me trae dicha información (me deja la celda en blanco).
Como podría solucionarlo?
Formula:
=IFERROR(QUERY({
IMPORTRANGE(“Elysa Coordinador!$A1:$AQ”);
IMPORTRANGE(“Lissette Coordinador!$A2:$AQ”)
},
“select * where Col1”order by Col2 asc”),””)
Gracias de antemano.
Hola Gabriel
Ahí te respondí en el otro comentario
Saludos!
HOLA
Excelente aporte el que nos compartes.
tengo una duda:
como puedo hacer el uso del HAVING en el query.
No se porque no me permite usarlo en esta funcion.
Hola
Encontré la solución usando el recurso de subquerys.
De esta manera puedo usar en el WHERE del QUERY final, lo que requiero del HAVING del QUERY principal.
=QUERY(DATOS!A:D;”Select A,SUM(D) group by A) ‘este es el QUERY PRINCIPAL DEL QUE NECESITO EL HAVING Sum(D)9″)
Asi obtengo el resultado que necesitaba
Comparto esto porque la verdad le busque un buen rato la manera. y puede ayudarle a alguno.
Excelente aporte!
La verdad no soy muy bueno en SQL entonces menos mal lo descifraste y le puede servir a otro
Un gran saludo!
Hola.
Quisiera saber cual es el Query para buscar entre intervalos de fechas?.
Gracias
Hola Carlos
Aquí te dejo el video
https://www.youtube.com/watch?v=rF_7Xiw_EI4
Saludos!
Independientemente de si es posible resolverlo con QUERY, que estaría bien saberlo, he averiguado que puede hacerse muy fácilmente con la función VLOOKUP:
=VLOOKUP(A1,Tabla1!$A$1:$C,1,false)
Gracias de todos modos por difundir conocimiento. Lo dejo aquí para que no te moleste otro más novato que yo si busca lo mismo 😉
Tienes razón!
Si solo hay una coincidencia, o si solo necesitas la primera, un VLOOKUP hace el trabajo
QUERY funciona mejor para cuando son varios resultados
Saludos!
Muchas gracias Juan. Está muy bien explicado para dar los primeros pasos, pero necesito ir más allá. Necesito hacer en la consulta una comparación entre las dos tablas, la de origen de datos y la actual. ¿Cómo referencio en la condición WHERE la celda de la tabla actual?
Concretamente tengo una Tabla1 con A:nombre B:Apellidos C:DNI y una Tabla2 con A:DNI y B:Consulta para obtener el nombre de la Tabla1
Me funciona con:
=QUERY(Tabla1!A1:C;”SELECT A WHERE C = ‘12345678Z'”;0)
Pero no sé cómo hacer el valor dinámico. No funciona:
=QUERY(Tabla1!A1:C;”SELECT A WHERE C = Tabla2!B1″;0)
Mil gracias.
Hola Esteban
Ibas por muy buen camino
Como es una concatenación de texto hay que hacer un juego de comillas
Seria asi:
=QUERY(Tabla1!A1:C;”SELECT A WHERE C = ‘”&Tabla2!B1″‘”;0)
Saludos!
Buenas Juan, y en caso de querer comparar una de las condiciones con una celda de la misma pestaña? He intentado como cometabas aqui arriba pero no he conseguido. Quiero pasar de:
=QUERY(‘Pestaña 1’!$B$2:$P$300; “select D where C LIKE “”%1%”” AND B=’APELLIDO, Nombre'”;0)
a
=QUERY(‘Pestaña 1’!$B$2:$P$300; “select D where C LIKE “”%1%”” AND B='”&$B$3″‘”;0)
He probado distintas opciones pero no consigo acertar. Un saludo,
Jonathan
Hola Jonathan
Solo te falta concatenar la comilla sencilla al final
AND B='”&$B$3&”‘”
Saludos
Muchas gracias por la información, tengo una consulta si deseo filtrar un valor que sea igual al valor que contiene un celda en especifica ¿Cómo seria la formula?
Hola!
Aquí te dejo el video que te explica eso
https://youtu.be/8Utinr3rNI8
Saludos!
Buenas tardes Juan, quisiera saber porque sucede este error con QUERY “La consulta se ha completado con un resultado vacío” Si estoy utilizando bien la formula?
Hola Yiseth, seguramente la formula esta correcta, pero no estás poniendo las condiciones para que te traigan algo que necesitas. Debes ver que efectivamente hayan valores que cumplan las condiciones que le estas poniendo
Un gran saludo!
Excelente información. Me pasa lo mismo yo utilizo porcentajes y puse los mismos formatos en todas las columnas será el tipo de comillas?
Hola!
El tema con QUERY es que es una fórmula que convierte todo a texto
Una opción es pasar todo a texto
La otra es que toda la columna tengo el mismo formato así sea numero
Saludos!
Buenas noches, excelente posteo. Consulta, me gustaría traer los datos de una columna con query pero solo donde los valores de la misma sean distintos a un texto.
=QUERY(‘CORFO FTTH’!A:Z;”SELECT A,B,D,E,F,G,H,I,J,L,N,T,V WHERE F =’FT-FT_E’ OR F =’FT-FT_E-R’ AND I’EN CANCELACION'”;1)
Este ultimo parametro de la columna I no lo estaría interpretando la columna.
Muchas gracias
Hola Gerardo
Disculpa es que WordPress cambia los simbolos de comillas, como estas poniendo el operador de “En Cancelación”
Saludos!
Muchas gracias por la información, excelente página. Pregunta: una de las columnas a consultar, son filas con hipervínculos, al utilizar query solo me trae el texto o valor, sin el enlace, tendrás alguna opción o tip para solucionar esto?
hola!
Una posible solucion es crear una nueva columna con una formula parecida a esta
=REGEXEXTRACT(FORMULATEXT(B2);”[(](.+);”)
Que vuelve la formula un texto y extrae la url
después eso ya lo puedes usar en otro hipervinculo
Un gran saludo!
Hola, conoces o tienes algún tutorial, sobre esta opción que comentas?
Gracias
Hola Raul
No conozco de eso específico, pero ya mismo lo pongo en el listado para hacerlo pronto
Un gran saludo!
Hola, estupenda página.
Se puede dividir una columna con query, tal y como lo hace split?
Digamos que tengo una tabla y la segunda columna la quiero dividir en dos.
Solo se me ocurre hacer una tabla intermedia, pero me temo que no sea dinamica respecto el rango completo del origen de los datos.
Gracias por tus tutoriales
Hola Jaime
Mil gracias!
Desafortunadamente no se puede directamente desde QUERY
Nos tocaría usar arrayformula con el split y después hacer el query
Algo así como
QUERY(ArrayFormula(SPLIT(A1:A));”SELECT *”)
¡Un gran saludo!
Buen contenido, tienes un ejemplo con la opción de traer los datos de otra hoja de cálculo (otro archivo).
Hola Josue
Mil gracias!
Aquí te dejo un video usando QUERY e IMPORTRANGE
https://youtu.be/Ck-DRfZlwpM
Un gran saludo!
Tengo duda por que el query transforma mis datos en texto cuando son valores numéricos?
Hola Omar!
Cuentame el ejemplo exacto para poder ayudarte
Un gran saludo!
Hola!
Quisiera saber como puedo ponerle la condición de que me traiga unicamente de una columna las celdas que tengan una formula específica!
Mil gracias
Hola Natalia
Wow! Complejo. Tendriamos que ver el caso con lupa.
Como lo veo asi por encima, no se podria.
Tendriamos que hacer unas columnas auxiliares que nos extraigan la formula, con =FORMULATEXT(A1), y despues si hacer el fitro en el QUERY
Un gran saludo!
Hola Que tal.
Te hago una consulta.
Quiero traer datos de la columna BY y me lo toma como un operador que se puede hacer
Hola!
Hay un truco que puedes hacer, el problema es que si tu QUERY ya es muy largo, te toca cambiarlo todo.
Si en vez de =QUERY(A1:DD;”SELECT A,AB,BY”
Lo cambias por
=QUERY({A1:DD};”SELECT Col1,Col28,Col77″)
Lo malo de esto es que ahora todas tus columnas tienes que identificarlas con números
Y si tienes otros comandos como WHERE o ORDER BY ahi tambien tienes que cambiar las letras de columna por “Col “+ el numero de la columna
Me cuentas si te funciona.
Saludos!
Como va? muy bueno el post.
Te consulto, no estoy logrando hacer querys con %. Me trae error. hay algo que no este viendio?
ej: =query(‘Base 2’!A1:J61,”Select B WHERE C < 5% ",1)
Hola Ivan
Mil gracias por escribir.
Es mejor que uses decimales y no % porque este es un operador diferente para QUERY
Cambialo por 0.05
Me cuentas si te funciona
Saludos!
Hola buen dia, te consulto, ojala me puedas ayudar.
Tengo un libro de GoogleSheet, y varias hojas con informacion, todaslas hojas tienen los mismos encabezados y cantidad de columnas.
Esta formula me sirve para reunir todas las hojas en una hoja consolidada??
Saludos. Cristián.
Hola Cristian
Si, esa es la fórmula perfecta
Aquí te dejo un video donde hago exactamente lo que necesitas.
https://youtu.be/Qhky_Q33mp8
Espero te sirva
Saludos!
Excelente, mil gracias!
Excelente explicación. Muchas gracias por el aporte. Veamos un pasito mas adelante sobre esta función.
Saludos
Mil gracias Julian.
Un gran saludo!