É possível usar intervalos nomeados nas consultas da planilha do Google para que as referências das colunas sejam mantidas atualizadas?


9

Usando o Google Spreadsheets, você pode escrever consultas . No entanto, se você tiver letras de coluna entre aspas, elas não serão atualizadas conforme a ordem das colunas é alterada.

Existe uma maneira de escrever essas consultas para que elas não precisem ser atualizadas sempre que uma coluna for adicionada ou removida?

É possível usar intervalos nomeados em consultas para resolver esse problema?

Aqui está um exemplo: Se você adicionar uma coluna após 'F', a coluna 'G' será empurrada para 'H' e o significado da fórmula será alterado.

= Consulta (B: J, "selecione o grupo médio (J) por G")

Perguntas relacionadas

Esta questão não é a mesma que Usar consulta com cabeçalhos de coluna, em vez de letras de coluna, porque esta se concentra no uso de intervalos nomeados.

Respostas:


5

É meio complicado, mas é possível com um Range auxiliar e alguma concatenação.

O que precisa ser feito:

  1. Crie um intervalo nomeado, COLS, para carregar as letras da coluna desta maneira:

    A  
    B  
    C  
    D  
    E  
    ...
    

    Faça isso na vertical, como mostrado.

  2. Monte a string de consulta assim:

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

11
O intervalo nomeado funcionará na forma vertical ou horizontal.
Rubén

@ Rubén provavelmente está certo.
Oneide 15/11/16

3

Existe uma maneira de escrever essas consultas para que elas não precisem ser atualizadas sempre que uma coluna for adicionada ou removida?

É possível usar intervalos nomeados em consultas para resolver esse problema?

Sim, você pode usar intervalos nomeados em vez de cabeçalhos de coluna internos, mas a idéia básica é a mesma que outras respostas a isso e outras perguntas semelhantes neste site sugeridas: a planilha deve ser configurada para criar uma string SQL dinâmica .

Digamos que Je Gcorresponde aos intervalos nomeados Gradese Classrespectivamente.


A abordagem a seguir funciona apenas quando as colunas estão entre as colunas A e Z


CELL("address",Grades)retornará "$J:$J". Para obter a referência da coluna, use MID(CELL("address",Grades),2,1)get "J". A fórmula final é

= QUERY (B: J, "SELECT AVG (" &
MID (CÉLULA ("endereço", Notas), 2,1) e
") GRUPO POR" &
MID (CÉLULA ("endereço", Classe), 2,1))


A abordagem a seguir funciona para todos os casos


COLUMN(Grades)retornará um número inteiro (um número do formulário 1,2,3 etc.) Para simplificar a fórmula para criar o argumento da instrução SQL, sugiro forçar o SQL a usar referências de coluna do formulário COL1, COL2 etc. usando a matriz notação ( {B:J}). A fórmula final é

= QUERY ({B: J}, "SELECT AVG (Col" & COLUMN (notas) -1 & ") GRUPO POR COL" & COLUMN (Class) -1)

Planilha de demonstração

Referências

Usando matrizes no Planilhas Google - Ajuda do Editores do Google Docs


1

A resposta de Ruben não resolve o problema em todos os casos, porque MID(CELL("address",Grades),2,1)falha se o Gradesintervalo for movido para uma coluna de duas letras como $AA:$AA.

Nesse caso, a fórmula MID(CELL("address",Grades),2,2)é necessária. Para intervalos nomeados que abrangem ou se limitam ao $Z:$AAintervalo, essa fórmula se torna problemática.

A fórmula REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")resolve o problema no caso geral, mas questiono fortemente sua eficiência de CPU quando usada em uma planilha grande.


Na minha resposta, existem duas abordagens, mas essa resposta apenas critica uma delas. A segunda abordagem deve funcionar para todos os casos.
Rubén

Eu não acho que isso funcionará para intervalos nomeados que estão em folhas diferentes. Querendo saber se +2 anos desde que, se há melhores soluções para este ... como simplesmente ser capaz de referenciar o danado intervalos nomeados na própria consulta
mike01010

0

Me deparei com esta página em infoinspired.com que explica uma maneira de fazê-lo. Eu testei exatamente como no exemplo que ele deu e funcionou. A configuração:

      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

Sua explicação sobre F1: a fórmula ADDRESS que inclui as funções ROW e COLUMN retorna o endereço da célula B1. A função ESQUERDA extrai a primeira letra que é o cabeçalho da coluna.

--- Clique na célula F1 e vá para o menu Dados> Intervalos nomeados e nomeie o intervalo "Idade" (sem as aspas)

Agora você pode formular sua consulta como: =QUERY(A:B,"Select "&Age)

Ele tem exemplos mais complicados em sua página que estou prestes a testar agora, mas estou encorajado que o primeiro exemplo tenha funcionado!

Editar - desculpe se é exatamente isso que os outros têm proposto com suas respostas. Acabei de encontrar este exemplo claro e consegui descobrir isso. Achei que poderia ajudar outras pessoas com a mesma pergunta.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.