Query no column ошибка

Just something that i found especially if you find that you have done everything correct with your syntax and links. When attempting to import multiple ranges or sheets, it could be throwing this error due to a lack of permissions granted. It is likely that you have link-sharing turned off for the source spreadsheets that you desire to import and query. In general it is a GOOD practice to never turn on link sharing for spreadsheets that are the ‘source’ of your merge. So if this is the case, likely this is the reason why some importrange query’s that people have difficulty with in google sheets are not working right. Since it can be unsecure to turn link-sharing on in order to avoid this, and you might want the increased security of leaving your docs set to ‘share only with specific people’, here is one solution i found.

In a separate, blank sheet within the same file you hope to combine the data from multiple sheets into, run an importrange on each spreadsheet url you are trying to import, one by one. You’ll notice that when you hover over the error in the formula, assuming your syntax is correct, it will ask you to grant permission to the new spreadsheet to access the source spreadsheets. Do this for every spreadsheet url that you want to import; one by one. Then when you run your original importrange function on multiple spreadsheet urls in one formula, it will work. (Again assuming that the syntax used here is also good as well.) Oh and this seems to apply to even COPIES of the same master combined sheet you make. For some reason, i had to repeat the process for copies of the merger spreadsheet as well.

I searched and searched and finally discovered this after hours! For some reason when trying to use importrange on multiple spreadsheets in the same formula, google throws an error that can sometimes have nothing to do with what’s actually wrong and the issue may have to do with permission issues; since the formula can’t find any data where it is expecting to. (Hence things like the col errors and even other errors like array errors.)

Hope this helps! :) I think it goes back to the fact that none of my source sheets have link sharing turned ON and sharing is only for specific people via email. But again, this is A LOT safer. Worth the inconvenience i’d say especially in view of the potential issues that can be involved with link-sharing …. google it :)

Это вторая часть нашего мануала по функции QUERY в Google Sheets. В первой части мы расписали ее основной функционал, конструкции, синтаксис, формулы импорта, разные способы сортировки, группирования и агрегации данных.

Вторая часть посвящена кляузе WHERE и типичным ошибкам, которые могут возникать в работе с QUERY. В этот раз мы снова взяли в качестве примера данные о топовых фильмах из Википедии, как и в первой части, — и исследовали различные примеры их использования с помощью QUERY.

Для удобства все формулы будут сохранены в гугл-таблице. Чтобы получить полное понимание возможностей функции, рекомендуем прочитать обе части мануала. 

Функция WHERE в формуле QUERY

Мы начнем с простых шагов, а в конце создадим таблицу на вкладке Country + Subgenre.

Шаг 1. Базовые критерии, которые нужно знать для работы с WHERE

Возьмем тот же самый источник из Википедии с фильмами

=QUERY(IMPORTHTML(«https://en.wikipedia.org/wiki/AFI%27s_100_Years…100_Movies_(10th_Anniversary_Edition)»;»Table»);»Select * «)

Напоминаю, что у нас есть:
1) Rank — ранг в формате Текст от 1. до 100. (не число, потому что есть точка в конце)
2) 10th anniversary list (2007) — название фильма в формате Текст
3) Director — режиссер в формате Текст
4) Year — год в формате Число
5) Production companies — компания, формат Текст
6) Change from 1998 — количество изменений в формате Число

Обратите внимание! В конце каждой колонки указан ее формат (текст или число).

Как и в языках программирования, мы имеем дело с разным распознаванием введенных данных в формулу. Например, если мы хотим сказать, что:

Col4 = 1967

то не ставим одинарные кавычки, потому что наш Year существует в формате Число.

Наш Director — текст, поэтому если мы планируем вывести значения, где режиссер = Стивен Спилберг, то наш запрос будет обрамлен в кавычки:

Col3 = ‘Steven Spielberg’

Если мы работаем с датой, то добавляем метку date и оборачиваем в одинарные кавычки:

Col60 = date’2023-05-01′

Символы сравнения, которые существуют
и поддерживаются в WHERE:

* Если интересно узнать больше о matches, перечень здесь

Возвращаемся к нашей задаче. Например, мы хотим получить таблицу, где режиссер Стивен Спилберг:

=QUERY(IMPORTHTML(«https://en.wikipedia.org/wiki/AFI%27s_100_Years…100_Movies_(10th_Anniversary_Edition)»;»Table»);
«Select * where Col3 = ‘Steven Spielberg'»)

А теперь давайте выведем таблицу, где год = 1946:

=QUERY(IMPORTHTML(«https://en.wikipedia.org/wiki/AFI%27s_100_Years…100_Movies_(10th_Anniversary_Edition)»;»Table»);
«Select * where Col4 = 1946»)

А теперь — таблицу, где могла быть задействована кинокомпания 20th Century Fox. Поскольку некоторые фильмы делают несколько компаний, мы поставим like ‘%20th Century-Fox%’, потому что она может быть написана как первой, так и последней:

=QUERY(IMPORTHTML(«https://en.wikipedia.org/wiki/AFI%27s_100_Years…100_Movies_(10th_Anniversary_Edition)»;»Table»);
«Select * where Col5 like ‘%20th Century-Fox%'»)

Шаг 2. Работа с динамическими показателями

Здесь уделим внимание работе с динамическими (изменяемыми) параметрами. На практике редко можно встретить ситуацию, в которой нужно статически указать, что год = 1946 или кинокомпания = 20th Century Fox.

В QUERY мы можем задать значение, содержащееся в ячейке. То есть год = не 1946, а год = значению, которое мы введем в ячейку А2.

Например, создадим таблицу clicks:

В этой таблице мы имеем значения по Country — Clicks — Date.

Выведем уникальные страны с помощью формулы

=UNIQUE(A2:A)

получаем уникальные значения по атрибуту Country:

➡️ Теперь создадим динамическую таблицу, которая будет выводить значения в зависимости от выбранной страны. 

Создадим выпадающий список значений Country. В гугл-таблицах это делается через Данные — Проверка данных. 

Справа появится панель «Проверка данных» — жмем «Добавить новое», категория — «Выпадающее меню (из диапазона)» — выбираем диапазон данных, в котором ранее мы просчитали уникальные значения для Country:

Теперь у нас есть выпадающий список с параметрами в клеточке В2:

Чтобы задать значение клеточки в query, нужно использовать незнакомый синтаксис. 

Если мы введем

=QUERY(clicks!A:C;» SELECT * WHERE A = B2″)  

то увидим ошибку:

Для работы с клетками таблицы в query мы используем вот такой синтаксис формулы:

=QUERY(clicks!A:C;» SELECT * WHERE A = ‘»&B2&»‘»)

То есть В2 обернута в одинарные кавычки (‘ ‘), потом двойные (“ “), а потом еще в амперсанд (&&).

Если отделить пробелами, вот как это выглядит: ‘ “ & B2 & ” ’

Получаем такую таблицу, которая будет изменяться в зависимости от выбранного значения в клетке В2:

➡️ Задача следующая — доработать формулу в гугл-таблицах, чтобы, если в клетке В2 не было введено никакое значение, выводило весь список.

В чем необходимость такой задачи? Ранее мы указали, что А должно равняться значению в ячейке В2

(WHERE A = ‘»&B2&»‘)

так что если клетка В2 будет пустой (B2 is null), то и А будет равняться значению «пусто», или null — и значения выведены в таблицу не будут.

Сделаем это с помощью функции IF.

Нам нужно, чтобы если значение В2 = пусто, то не выводило ничего, а если не пусто, то выводило В2. То есть так:

=IF(B2 = «»;; «WHERE A = ‘»&B2&»‘ «)

А теперь подставляем в формулу QUERY:

=QUERY(clicks!A:C;» SELECT * «&IF(B2 = «»;; «WHERE A = ‘»&B2&»‘ «))

Теперь таблица выглядит так, если значение не выбрано:

И так, если выбрано:

➡️ Задача следующая — добавить фильтрацию по дате.

Работа с датами в query будет немного отличаться. Сделаем 2 отдельные ячейки для ввода данных, в которых в ячейке В3 будет содержаться минимальная дата (date start), а в В4 — максимальная (date end):

Для дат мы используем такой синтаксис:

C <= date'»&TEXT(B4;»yyyy-mm-dd»)&»‘

То есть значение даты в формате TEXT(B4;»yyyy-mm-dd») оборачиваем в ту же конструкцию: одинарные кавычки + двойные кавычки + амперсанды (‘ “ & значение & ” ’).

После этого еще, как и раньше для даты, мы оборачиваем в параметр date.

Формула имеет такой вид:

=QUERY(clicks!A:C;» SELECT * WHERE A = ‘»&B2&»‘ AND C >= date'»&TEXT(B3;»yyyy-mm-dd»)&»‘ AND C <= date'»&TEXT(B4;»yyyy-mm-dd»)&»‘»)

А таблица для страны Турция за период с 2023-02-15 по 2023-03-01 — вот такой:

➡️ Следующая задача — вывести значения по стране, дате старта, дате окончания, в которых поле ячейки — не пустое.

Таблица Clicks содержит пустые (или null) значения в колонке Clicks — нам нужно их исключить:

Для работы с пустыми клетками будем использовать синтаксис is not null.
Если мы зададим условие, где колонка В не равняется пустому значению, то есть 

where B <> “”

то увидим вот такую ошибку:

Значения null обрабатываются в таблице не так, как другие. То есть если бы вы хотели указать, что значение в таблице не равно 100, то конструкция выше была бы абсолютно корректной. Но с null нужно только через is not null, если вам необходимо вывести значения, не равные пустоте, и is null — если равны.

Правильная формула имеет вот такой вид:

=QUERY(clicks!A:C;» SELECT * WHERE A = ‘»&B2&»‘ AND C >= date'»&TEXT(B3;»yyyy-mm-dd»)&»‘ AND C <= date'»&TEXT(B4;»yyyy-mm-dd»)&»‘ AND B IS NOT NULL»)

И вот таблица:

➡️ Теперь создадим таблицу из ссылки https://en.wikipedia.org/wiki/List_of_horror_films_of_2023, которая будет фильтроваться по таким ключам:

  • Country — ячейка В2

  • Subgenre — ячейка В3

Примечание: если значение пустое, то выводить все, если нет — то значения фильтра. 

Сначала сделаем подготовку. На листе preparing я отдельно вывела уникальные значения для нашего выпадающего списка, как мы делали раньше:

Если вы заметили, значения колонки Subgenre содержат квадратные скобки с цифрами, что достаточно неудобно для фильтрации.

Я обработала данные и вывела их в уникальные значения с помощью такой формулы:

=UNIQUE(QUERY(ARRAYFORMULA(SPLIT(query(importhtml(«https://en.wikipedia.org/wiki/List_of_horror_films_of_2023″;»Table»);»Select Col5 «);»[«));»SELECT Col1 OFFSET 1»))

После этого в формуле таблицы вместо знака равно (=) мы будем использовать contains.

Итак, мы имеем таблицу из Википедии, и чтобы выполнить задание, нам нужно просчитать 4 варианта развития событий:

1 — когда Country и Subgenre пустые

2 — когда Country пустое, а Subgenre — нет

3 — когда Country не пустое, а Subgenre пустое

4 — когда Country и Subgenre не пустые

В нашей импортированной таблице Country = Col4, Subgenre = Col5

Формула IF:

#1. Зададим условие: если Country пустое, то Country = B2:

IF(B2 = “”; “”; «WHERE Col4 = ‘»&B2&»‘»)

#2. Добавим в нашу формулу проверку: если Country пустое, то пустое ли Subgenre? Если так, то пусто, если нет, то = В3 (то есть прорабатываем пункты 1–3 нашего ТЗ):

IF(B2 = “”; IF(B3=»»;»»;»WHERE Col5 contains ‘»&B3&»‘»); «WHERE Col4 = ‘»&B2&»‘»)

#3. Добавляем последний пункт — когда все не пусто:

IF(B2=»»;
IF(B3=»»;»»;»WHERE Col5 contains ‘»&B3&»‘»);
IF(B3=»»;»WHERE Col4 = ‘»&B2&»‘»;»WHERE Col4 = ‘»&B2&»‘ AND Col5 contains ‘»&B3&»‘»))

Наша формула имеет такой вид:

=query(importhtml(«https://en.wikipedia.org/wiki/List_of_horror_films_of_2023″;»Table»);»Select * «&
   IF(B2=»»;
   IF(B3=»»;»»;»WHERE Col5 contains ‘»&B3&»‘»);
   IF(B3=»»;»WHERE Col4 = ‘»&B2&»‘»;»WHERE Col4 = ‘»&B2&»‘ AND Col5 contains ‘»&B3&»‘»))&
   IF(AND(B2=»»;B3=»»);»OFFSET 1″;»»)

Гугл-Таблица выглядит так:

6 самых распространенных ошибок в QUERY

#1. #REF: результат массива не развернут, иначе он переписал бы данные в B3.

Результат не будет введен, если в ячейке, в которой должно быть содержание таблицы QUERY, введено что-то лишнее. Просто удалите это.  

#2. #REF: не удается найти диапазон или таблицу для импортированного диапазона.

Эта ошибка свидетельствует об ошибке ввода данных диапазона или листа. Проверьте правильность данных.

#3. #VALUE: не удается проанализировать строку запроса для «Параметр 2 функции QUERY»: NO_COLUMN: col4

Как мы писали в предыдущей статье, если введено col1 вместо Col1, то будет ошибка, как на картинке выше.

#4. #VALUE: не удается проанализировать строку запроса для «Параметр 2 функции QUERY»: NO_COLUMN: Col7

Это означает, что, например, вы ввели диапазон с А по В — то есть 2 колонки, а в запросе select пытаетесь что-то сделать с колонкой G.

В таком случае следует изменить диапазон с A:B на A:G. QUERY будет обрабатывать только данные, которые вы вводили в диапазоне ранее.

#5. #VALUE: не удается проанализировать строку запроса для «Параметр 2 функции QUERY»: ADD_COL_TO_GROUP_BY_OR_AGG: Col3

Если есть агрегация, то должно быть и группирование по всем значениям, не содержащим агрегацию.

#6. QUERY сжимает первые строки в одну строку заголовков. Вы встретитесь с ситуациями, когда пишете формулу и в конце вас ждет результат, в котором в первой строке импортировано сразу 3 строки.

Например, вот так это выглядит:

Для решения этой проблемы функция QUERY содержит опциональный компонент в конце формулы:

QUERY(диапазон; запрос; [заголовки])

Из гугл-справки: «Заголовки — [НЕОБЯЗАТЕЛЬНО] — количество заглавных строк в верхней части раздела данных. Если параметр опущен или равен -1, его значение вычисляется автоматически в зависимости от содержания данных».

На практике эту проблему можно решить, добавив в конце единицу. Вот так будет выглядеть формула:

=QUERY(A:B;» SELECT * «; 1)

Хотите получать дайджест статей?

Одно письмо с лучшими материалами за неделю. Подписывайтесь, чтобы ничего не упустить.

Спасибо за подписку!

I am currently working in the following spreadsheet

https://docs.google.com/spreadsheets/d/13KfjUhWSB-BjGyC1G8f8i8o4SPd1kFFLkjN7D6VY8Lk/edit#gid=993210576

In which I am importing data from another worksheet using IMPORTRANGE, and writing a QUERY to match the cells in column B, which correspond to a specific part number, to their corresponding cut quantity found in Column D of the imported sheet. The query I have written is as follows.

=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1kFK-ZW8QjtsLYY5twdoMNTdqobGNWIV8nAFBRdouE28/edit#gid=473793446", 
 "FABRICATION LOG!A78169:K"), "Select Col3 where Col4 = "&B3&" limit 1", 0)`

And is returning the error message:

Unable to parse query string for Function QUERY parameter 2: NO_COLUMN: WFR332703

I have used ImportRange for the sheet I am linking to in sheet1 of the spreadsheet linked above, and allowed access, so the error is not there.

Sheet1 is there to display the values returned for the IMPORTRANGE so that I can manually look up values I am expecting to get. Now for some of these cells, I expect to not get a value, as these will not be in the sheet I’m importing. But for others, I am expecting a numerical value, which is not being returned. I suspect this may have something to do with the fact that there is a mismatch between Datatypes since the entries in column b are both letters and numbers, but this is only a hunch with no actual facts to back it up. If anyone has any suggestions It’d be greatly appreciated.

Здравствуйте,
Есть 7 листов у всех одинаковая структура, но они не имеют ограничений по количеству строк
5a58c42f1cabb445331563.jpeg
Задача объединить их в одном листе. Проблема в том что нужно выгружать только заполненные ячейки и чтоб все подстраивалось если в каком листе количество строк увеличилось
=QUERY({‘Google Chrome’!A15:I999;’Я.Браузер’!A16:I999;Safari!A16:I999;Firefox!A16:I999;Opera!A16:I999;’Internet Explorer’!A16:I999;Edge!A16:I999};»Select * where A matches ‘.+'»)
A15 это заголовки поэтому кроме первого все должны начинаться с A16 чтоб не повторять заголовки


  • Вопрос задан

  • 2640 просмотров

У вас проблема только в том, что не подстраивается количество строк? Тогда избавьтесь от «999»:
‘Google Chrome’!A15:I;’Я.Браузер’!A16:I …

относительно пустых ячеек обычно использую » where A != » » (не равно пустоте)

Пригласить эксперта


  • Показать ещё
    Загружается…

21 сент. 2023, в 19:28

10000 руб./за проект

21 сент. 2023, в 19:06

11111 руб./за проект

21 сент. 2023, в 19:00

6000000 руб./за проект

Минуточку внимания

google-query-languagegoogle-sheetsgoogle-sheets-formulagoogle-sheets-queryimportrange

I am currently working in the following spreadsheet

https://docs.google.com/spreadsheets/d/13KfjUhWSB-BjGyC1G8f8i8o4SPd1kFFLkjN7D6VY8Lk/edit#gid=993210576

In which I am importing data from another worksheet using IMPORTRANGE, and writing a QUERY to match the cells in column B, which correspond to a specific part number, to their corresponding cut quantity found in Column D of the imported sheet. The query I have written is as follows.

=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1kFK-ZW8QjtsLYY5twdoMNTdqobGNWIV8nAFBRdouE28/edit#gid=473793446", 
 "FABRICATION LOG!A78169:K"), "Select Col3 where Col4 = "&B3&" limit 1", 0)`

And is returning the error message:

Unable to parse query string for Function QUERY parameter 2: NO_COLUMN: WFR332703

I have used ImportRange for the sheet I am linking to in sheet1 of the spreadsheet linked above, and allowed access, so the error is not there.

Sheet1 is there to display the values returned for the IMPORTRANGE so that I can manually look up values I am expecting to get. Now for some of these cells, I expect to not get a value, as these will not be in the sheet I’m importing. But for others, I am expecting a numerical value, which is not being returned. I suspect this may have something to do with the fact that there is a mismatch between Datatypes since the entries in column b are both letters and numbers, but this is only a hunch with no actual facts to back it up. If anyone has any suggestions It’d be greatly appreciated.

Понравилась статья? Поделить с друзьями:
  • R keeper ошибка 200 логическая ошибка 0xc8
  • Quattro elementi qe 12d ошибка e1
  • Quota underflow ошибка
  • Quake champions ошибка 1201
  • Quartus ошибка 12014