Чи можна використовувати іменовані діапазони в запитах електронних таблиць Google, щоб оновлення посилань стовпців були актуальними?


9

За допомогою електронних таблиць Google ви можете писати запити . Однак якщо у лапках є літери стовпців, вони не оновлюються в міру зміни порядку стовпців.

Чи є спосіб написати ці запити, щоб вони не потребували оновлення щоразу, коли додається чи видаляється стовпець?

Чи можна використовувати названі діапазони в запитах для вирішення цієї проблеми?

Ось приклад: Якщо ви додасте стовпчик після "F", то стовпець "G" пересувається на "H" і значення формули змінюється.

= Запит (B: J, "вибрати середню (J) групу за G")

Пов'язані питання

Це питання не те саме, як Використання запиту із заголовками стовпців замість літер стовпців, оскільки це орієнтоване на використання названих діапазонів.

Відповіді:


5

Це свого роду хитрість, але це можливо за допомогою діапазону помічників і деякої конкатенації.

Що потрібно зробити:

  1. Створіть названий діапазон, COLS, щоб переносити такі літери стовпців:

    A  
    B  
    C  
    D  
    E  
    ...
    

    Робіть це вертикально, як показано.

  2. Зберіть рядок запиту так:

    =QUERY( B:J, "SELECT AVG(" & INDEX(**COLS**, COLUMN(J1)) & ") GROUP BY " & INDEX(**COLS**, COLUMN(G1)) )
    

1
Названий діапазон буде працювати як у вертикальній, так і в горизонтальній формі.
Рубен

@ Рубен, певно, має рацію.
Oneide

3

Чи є спосіб написати ці запити, щоб вони не потребували оновлення щоразу, коли додається чи видаляється стовпець?

Чи можна використовувати названі діапазони в запитах для вирішення цієї проблеми?

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

Скажімо, це Jі Gвідповідає названим діапазонам Gradesі Classвідповідно.


Наступний підхід працює лише тоді, коли стовпці знаходяться між стовпцями A і Z


CELL("address",Grades)повернеться "$J:$J". Для отримання посилання на стовпчик використовуйте MID(CELL("address",Grades),2,1)для отримання "J". Заключна формула така

= ЗАПИТАННЯ (B: J, "ВИБІРТЕ AVG (" &
MID (CELL ("адреса", оцінки), 2,1) &
") ГРУПА ПО" &
MID (CELL ("адреса", клас), 2,1))


Наступний підхід працює у всіх випадках


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

= ЗАПИТАННЯ ({B: J}, "ВИБІРТЬ AVG (Col" & COLUMN (класи) -1 & ") ГРУПА ПО Col" & COLUMN (Клас) -1)

Демонстраційна таблиця

Список літератури

Використання масивів у Google Таблицях - Довідка редакторів 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]+)\$")вирішує проблему для загального випадку, але я настійно ставлю під сумнів її ефективність процесора при використанні на великих електронних таблицях.


У моїй відповіді є два підходи, але ця відповідь критикує лише один із них. Другий підхід повинен працювати у всіх випадках.
Рубен

Я не думаю, що це буде працювати для названих діапазонів, які є на різних аркушах. Цікаво, чи +2 роки з того часу, якщо є кращі рішення для цього ... наприклад, просто мати можливість посилатися на
проклятий іменний

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)

На своїй сторінці у нього є більш складні приклади, які я зараз перевіряю, але я радий, що перший приклад спрацював!

Редагувати - вибачте, якщо це саме те, що пропонують інші зі своїми відповідями. Я щойно знайшов цей приклад кришталево чистим і зміг це зрозуміти. Думав, що це може допомогти іншим у тому ж питанні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.