Можно ли использовать именованные диапазоны в запросах электронных таблиц Google, чтобы ссылки на столбцы обновлялись?

9

Используя таблицы Google, вы можете писать запросы . Однако если в кавычках есть буквы столбцов, они не обновляются при изменении порядка столбцов.

Есть ли способ написать эти запросы, чтобы их не нужно было обновлять каждый раз при добавлении или удалении столбца?

Можно ли использовать именованные диапазоны в запросах для решения этой проблемы?

Вот пример: если вы добавите столбец после «F», то столбец «G» будет переведен в «H», и значение формулы изменится.

= Запрос (B: J, «выбрать группу avg (J) по G»)

Смежные вопросы

Этот вопрос отличается от использования запроса с заголовками столбцов вместо букв столбцов, поскольку этот вопрос ориентирован на использование именованных диапазонов.

Алекс Б
источник

Ответы:

5

Это довольно сложно, но это возможно с помощью вспомогательного Range и некоторой конкатенации.

Что должно быть сделано:

  1. Создайте именованный диапазон, COLS, для переноса букв столбца следующим образом:

    A  
    B  
    C  
    D  
    E  
    ...
    

    Сделайте это вертикально, как показано на рисунке.

  2. Соберите строку запроса следующим образом:

    =QUERY( B:J, "SELECT AVG(" & INDEX(**COLS**, COLUMN(J1)) & ") GROUP BY " & INDEX(**COLS**, COLUMN(G1)) )
    
Oneide
источник
1
Названный диапазон будет работать как в вертикальной, так и в горизонтальной форме.
Рубен
@ Рубен, наверное, прав.
Oneide
3

Есть ли способ написать эти запросы, чтобы их не нужно было обновлять каждый раз при добавлении или удалении столбца?

Можно ли использовать именованные диапазоны в запросах для решения этой проблемы?

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

Допустим, что Jи Gсоответствует именованным диапазонам Gradesи Classсоответственно.


Следующий подход работает только тогда, когда столбцы находятся между столбцами A и Z


CELL("address",Grades)вернется "$J:$J". Чтобы получить ссылку на столбец, используйте MID(CELL("address",Grades),2,1)get "J". Окончательная формула

= QUERY (B: J, "ВЫБЕРИТЕ AVG (" &
MID (ЯЧЕЙКА ( "адрес", классы), 2,1) &
") ГРУППА ПО "&
MID (ЯЧЕЙКА ( "адрес", класс), 2,1))


Следующий подход работает для всех случаев


COLUMN(Grades)вернет целое число (число в форме 1,2,3 и т. д.). Чтобы упростить формулу для создания аргумента оператора SQL, я предлагаю заставить SQL использовать ссылки на столбцы в форме COL1, COL2 и т. д. с помощью массива. обозначение ( {B:J}). Окончательная формула

= QUERY ({B: J}, "ВЫБЕРИТЕ AVG (Col" & COLUMN (Grades) -1 & ") GROUP BY Col" и COLUMN (Class) -1)

Демо-таблица

Ссылки

Использование массивов в Google Sheets - Cправка - Редакторы Документов Google

Рубена
источник
1

Ответ Рубена не решает проблему для всех случаев, потому что MID(CELL("address",Grades),2,1)терпит неудачу, если Gradesдиапазон перемещается в двухбуквенный столбец, как $AA:$AA.

В этом случае формула MID(CELL("address",Grades),2,2)необходима. Для именованных диапазонов, которые охватывают или упираются в $Z:$AAдиапазон, эта формула становится проблематичной.

Формула REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")решает проблему для общего случая, но я сильно подвергаю сомнению его эффективность использования ЦП при использовании всей большой таблицы.

Stobber
источник
В моем ответе есть два подхода, но этот ответ критикует только один из них. Второй подход должен работать для всех случаев.
Рубен
Я не думаю, что это будет работать для именованных диапазонов, которые находятся на разных листах. Интересно, если +2 года с тех пор, если есть лучшие решения для этого ... например, просто возможность ссылаться на проклятые именованные диапазоны в самом запросе
mike01010
0

Я наткнулся на эту страницу на infoinspired.com, которая объясняет один из способов сделать это. Я проверил это точно так же, как в примере, который он дал, и это сработало. Настройка:

      A        B        F                                     G
 1  names     Age   =left(address(row(B1),column(B1),4))   =QUERY(A:B,"Select "&Age)
 2  joey      32
 3  nicole    26
 4  sally     66

Его объяснение F1: формула ADDRESS, которая включает функции ROW и COLUMN, возвращает адрес ячейки B1. Функция LEFT извлекает из нее первую букву, которая является заголовком столбца.

--- Нажмите на ячейку F1 и перейдите в меню «Данные»> «Именованные диапазоны» и назовите диапазон «Возраст» (без кавычек).

Теперь вы можете сформулировать свой запрос как: =QUERY(A:B,"Select "&Age)

На его странице есть более сложные примеры, которые я сейчас собираюсь протестировать, но я рад, что первый пример сработал!

Изменить - извините, если это именно то, что другие предлагали с их ответами. Я только нашел этот пример кристально чистым и смог понять это. Думаю, это может помочь другим с тем же вопросом.

Lise
источник