È possibile utilizzare intervalli denominati nelle query del foglio di calcolo di Google in modo che i riferimenti alle colonne siano aggiornati?


9

Utilizzando Fogli di lavoro Google, puoi scrivere query . Tuttavia, se le virgolette sono racchiuse tra virgolette, queste non vengono aggiornate quando cambiano l'ordine delle colonne.

Esiste un modo per scrivere queste query in modo che non debbano essere aggiornate ogni volta che una colonna viene aggiunta o rimossa?

È possibile utilizzare intervalli denominati nelle query per risolvere questo problema?

Ecco un esempio: se aggiungi una colonna dopo "F", la colonna "G" viene spostata su "H" e il significato della formula cambia.

= Query (B: J, "seleziona il gruppo avg (J) per G")

Domande correlate

Questa domanda non è la stessa dell'utilizzo di Query con intestazioni di colonna anziché lettere di colonna poiché questa è focalizzata sull'uso di intervalli denominati.

Risposte:


5

È un po 'complicato, ma è possibile con una gamma di supporto e un po' di concatenazione.

Cosa bisogna fare:

  1. Crea un intervallo denominato, COLS, per portare le lettere delle colonne in questo modo:

    A  
    B  
    C  
    D  
    E  
    ...
    

    Fallo in modo verticale come mostrato.

  2. Assemblare la stringa di query in questo modo:

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

1
L'intervallo denominato funzionerà sia in forma verticale che orizzontale.
Rubén,

@ Rubén probabilmente ha ragione.
Oneide,

3

Esiste un modo per scrivere queste query in modo che non debbano essere aggiornate ogni volta che una colonna viene aggiunta o rimossa?

È possibile utilizzare intervalli denominati nelle query per risolvere questo problema?

Sì, è possibile utilizzare intervalli denominati anziché intestazioni di colonna incorporate, ma l'idea di base è la stessa di altre risposte a ciò suggerite da altre domande simili in questo sito: il foglio di calcolo dovrebbe essere impostato per creare una stringa SQL dinamica .

Diciamo che Je Gcorrisponde ad intervalli denominati Gradese Classrispettivamente.


L'approccio seguente funziona solo quando le colonne si trovano tra le colonne A e Z.


CELL("address",Grades)tornerà "$J:$J". Per ottenere il riferimento alla colonna utilizzare MID(CELL("address",Grades),2,1)per ottenere "J". La formula finale è

= QUERY (B: J, "SELEZIONA AVG (" &
MID (CELL ( "indirizzo", i gradi), 2,1) e
") RAGGRUPPARE PER "&
MID (CELL ( "indirizzo", Class), 2,1))


Il seguente approccio funziona per tutti i casi


COLUMN(Grades)restituirà un numero intero (un numero del modulo 1,2,3 ecc.) Per semplificare la formula per creare l'argomento dell'istruzione SQL, suggerisco di forzare SQL a utilizzare i riferimenti di colonna del modulo COL1, COL2, ecc. utilizzando l'array notazione ( {B:J}). La formula finale è

= QUERY ({B: J}, "SELEZIONA AVG (Col" e COLONNA (gradi) -1 e ") GRUPPO PER COL" e COLONNA (Classe) -1)

Foglio elettronico dimostrativo

Riferimenti

Utilizzo di array in Fogli Google - Guida degli editor di Documenti Google


1

La risposta di Ruben non risolve il problema in tutti i casi perché MID(CELL("address",Grades),2,1)non riesce se l' Gradesintervallo viene spostato in una colonna a doppia lettera come $AA:$AA.

In tal caso, MID(CELL("address",Grades),2,2)è necessaria la formula . Per gli intervalli denominati che si estendono o si attestano sull'intervallo $Z:$AA, questa formula diventa problematica.

La formula REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")risolve il problema per il caso generale, ma dubito fortemente della sua efficienza della CPU quando viene utilizzata su un foglio di calcolo di grandi dimensioni.


Nella mia risposta ci sono due approcci, ma questa risposta ne critica solo uno. Il secondo approccio dovrebbe funzionare per tutti i casi.
Rubén,

Non credo che funzionerà per intervalli nominali che si trovano su fogli diversi.
Mi chiedo

0

Mi sono imbattuto in questa pagina su infoinspired.com che spiega un modo per farlo. L'ho provato esattamente come nell'esempio che ha dato e ha funzionato. Il set up:

      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

La sua spiegazione di F1: la formula ADDRESS che include le funzioni ROW e COLUMN restituisce l'indirizzo di cella di B1. La funzione SINISTRA estrae da essa la prima lettera che rappresenta l'intestazione della colonna.

--- Fare clic sulla cella F1, quindi andare al menu Dati> Intervalli denominati e denominare l'intervallo "Età" (senza virgolette)

Ora puoi formulare la tua query come: =QUERY(A:B,"Select "&Age)

Ha esempi più complicati nella sua pagina che sto per testare ora, ma sono incoraggiato che il primo esempio abbia funzionato!

Modifica - scusate se questo è esattamente ciò che altri hanno proposto con le loro risposte. Ho appena trovato questo esempio cristallino e sono riuscito a capirlo. Ho pensato che potesse aiutare gli altri con la stessa domanda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.