Ist es möglich, benannte Bereiche in Google-Tabellenkalkulationsabfragen zu verwenden, damit die Spaltenreferenzen auf dem neuesten Stand gehalten werden?

9

Mit Google Spreadsheets können Sie Abfragen schreiben . Wenn Sie jedoch Spaltenbuchstaben in Anführungszeichen haben, werden diese nicht aktualisiert, wenn sich die Spaltenreihenfolge ändert.

Gibt es eine Möglichkeit, diese Abfragen zu schreiben, damit sie nicht jedes Mal aktualisiert werden müssen, wenn eine Spalte hinzugefügt oder entfernt wird?

Ist es möglich, benannte Bereiche in Abfragen zu verwenden, um dieses Problem zu lösen?

Hier ein Beispiel: Wenn Sie eine Spalte nach 'F' hinzufügen, wird die Spalte 'G' auf 'H' verschoben und die Bedeutung der Formel ändert sich.

= Abfrage (B: J, "durchschnittliche (J) Gruppe nach G auswählen")

Verwandte Fragen

Diese Frage ist nicht mit der Verwendung von Abfrage mit Spaltenüberschriften anstelle von Spaltenbuchstaben identisch, da sich diese auf die Verwendung benannter Bereiche konzentriert.

Alex B.
quelle

Antworten:

5

Es ist eine Art knifflig, aber es ist möglich mit einem Helfer Range und etwas Verkettung.

Was getan werden muss:

  1. Erstellen Sie einen benannten Bereich, COLS, um die Spaltenbuchstaben wie folgt zu tragen:

    A  
    B  
    C  
    D  
    E  
    ...
    

    Machen Sie es vertikal wie gezeigt.

  2. Stellen Sie die Abfragezeichenfolge wie folgt zusammen:

    =QUERY( B:J, "SELECT AVG(" & INDEX(**COLS**, COLUMN(J1)) & ") GROUP BY " & INDEX(**COLS**, COLUMN(G1)) )
    
Oneide
quelle
1
Der benannte Bereich funktioniert sowohl in vertikaler als auch in horizontaler Form.
Rubén
@ Rubén hat wohl recht.
Oneide
3

Gibt es eine Möglichkeit, diese Abfragen zu schreiben, damit sie nicht jedes Mal aktualisiert werden müssen, wenn eine Spalte hinzugefügt oder entfernt wird?

Ist es möglich, benannte Bereiche in Abfragen zu verwenden, um dieses Problem zu lösen?

Ja, Sie könnten benannte Bereiche anstelle von integrierten Spaltenüberschriften verwenden, aber die Grundidee ist dieselbe wie bei anderen Antworten auf diese und ähnliche Fragen auf dieser Site: Die Tabelle sollte so eingestellt sein, dass eine dynamische SQL-Zeichenfolge erstellt wird .

Lassen Sie sagen , dass Jund Gauf benannte Bereiche entspricht Gradesund Classjeweils.


Der folgende Ansatz funktioniert nur, wenn sich die Spalten zwischen den Spalten A und Z befinden


CELL("address",Grades)wird zurückkehren "$J:$J". Um die Spaltenreferenz MID(CELL("address",Grades),2,1)zu erhalten, verwenden Sie , um zu erhalten "J". Die endgültige Formel lautet

= QUERY (B: J, "AVG AUSWÄHLEN (" &
MITTE (ZELLE ("Adresse", Noten), 2,1) &
") GRUPPIERE NACH "&
MID (CELL ("Adresse", Klasse), 2,1))


Der folgende Ansatz funktioniert in allen Fällen


COLUMN(Grades)gibt eine Ganzzahl zurück (eine Zahl der Form 1,2,3 usw.). Um die Formel zum Erstellen des SQL-Anweisungsarguments zu vereinfachen, schlage ich vor, SQL zu zwingen, Spaltenreferenzen der Form COL1, COL2 usw. mithilfe des Arrays zu verwenden Notation ( {B:J}). Die endgültige Formel lautet

= QUERY ({B: J}, "SELECT AVG (Col" & COLUMN (Noten) -1 & ") GROUP BY Col" & COLUMN (Class) -1)

Demo-Tabelle

Verweise

Verwenden von Arrays in Google Sheets - Hilfe der Google Text & Tabellen-Editoren

Rubén
quelle
1

Rubens Antwort löst das Problem nicht in allen Fällen, da sie MID(CELL("address",Grades),2,1)fehlschlägt, wenn der GradesBereich in eine Doppelbuchstaben-Spalte wie verschoben wird $AA:$AA.

In diesem Fall wird die Formel MID(CELL("address",Grades),2,2)benötigt. Für benannte Bereiche, die den $Z:$AABereich überspannen oder an diesen angrenzen, wird diese Formel problematisch.

Die Formel REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")löst das Problem für den allgemeinen Fall, aber ich bezweifle stark die CPU-Effizienz, wenn sie in einer großen Tabelle verwendet wird.

Stobber
quelle
In meiner Antwort gibt es zwei Ansätze, aber diese Antwort kritisiert nur einen von ihnen. Der zweite Ansatz sollte in allen Fällen funktionieren.
Rubén
Ich glaube nicht, dass dies für benannte Bereiche funktioniert, die auf verschiedenen Blättern angezeigt werden.
Ich frage mich
0

Ich bin auf diese Seite bei infoinspired.com gestoßen, die eine Möglichkeit erklärt, dies zu tun. Ich habe es genau wie in dem Beispiel getestet, das er gegeben hat, und es hat funktioniert. Die Einrichtung:

      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

Seine Erklärung von F1: Die ADRESS-Formel, die die Funktionen ROW und COLUMN enthält, gibt die Zellenadresse von B1 zurück. Die Funktion LINKS extrahiert den ersten Buchstaben, der die Spaltenüberschrift ist, daraus.

--- Klicken Sie auf Zelle F1 und gehen Sie dann zum Menü Daten> Benannte Bereiche und benennen Sie den Bereich "Alter" (ohne Anführungszeichen).

Jetzt können Sie Ihre Anfrage wie folgt formulieren: =QUERY(A:B,"Select "&Age)

Er hat kompliziertere Beispiele auf seiner Seite, die ich jetzt testen werde, aber ich bin ermutigt, dass das erste Beispiel funktioniert hat!

Bearbeiten - Entschuldigung, wenn dies genau das ist, was andere mit ihren Antworten vorgeschlagen haben. Ich fand dieses Beispiel gerade kristallklar und konnte es herausfinden. Ich dachte, es könnte anderen bei der gleichen Frage helfen.

Lise
quelle