Ich habe eine Formel, mit der ich den Spaltenbuchstaben für ein eindimensionales Array, das die Spaltenüberschriften eines Blattes sind, dynamisch abrufe. Um QUERY () mit Spaltennamen anstelle von Buchstaben zu verwenden.
SUBSTITUTE(ADDRESS(1,MATCH("Weight", Headers, 0),4), "1", "")
Die Syntax nimmt ziemlich viel Platz ein und kann für die Augen schwierig sein, wenn die Abfragen lang werden. Ein Beispiel:
=QUERY(A3:F13, "select "&SUBSTITUTE(ADDRESS(1,MATCH("Type", Headers, 0),4), "1", "")&" where ("&SUBSTITUTE(ADDRESS(1,MATCH("Version", Headers, 0),4), "1", "")&" = 'Version 1') and ("&SUBSTITUTE(ADDRESS(1,MATCH("Type", Headers, 0),4), "1", "")&" <> 'Type')")
Tut das gleiche wie
=QUERY(A3:F13, "select E where (A = 'Version 1') and (E <> 'Type')")
Mit dem Vorteil, immer die Zeile auszuwählen, möchte ich, egal in welcher Reihenfolge sie sind.
Ist es möglich, eine Funktion zu erstellen, die wie folgt funktioniert, ohne das Rad im Apps-Skript neu zu erstellen?:
GetHeaders(range, string)
=QUERY(A3:F13, "select "&GetHeader(Headers, "Type")&" where ("&GetHeader(Headers, "Version")&" = 'Version 1') and ("&GetHeader(Headers, "Type")&" <> 'Type')")
google-sheets
google-sheets-query
Douglas Gaskell
quelle
quelle
Antworten:
Ohne Apps-Skript
Ohne Apps Script kann man keine neue Funktion erstellen. Die einzige Möglichkeit, den Prozess zu rationalisieren, besteht darin, mehr Zellen irgendwo zu platzieren und auf diese zu verweisen.
Beispiel: Geben Sie unter jeder Überschrift wie "Gewicht" den Befehl ein
Dadurch werden die Spaltenbuchstaben unter die Überschriften gesetzt. Fügen Sie die Zeile mit Buchstaben in den Bereich "Überschriften" ein. Verwenden Sie in der Abfragezeichenfolge
Das ist leichter für die Augen als
Mit Apps Script
Wenn Sie einen Bereich (benannt oder anderweitig) an eine benutzerdefinierte Funktion übergeben, werden die Werte übergeben , ohne dass Informationen zu ihrer Position im Blatt vorliegen. Aber ich habe eine Lösung gefunden: Leiten Sie die Position der Header aus dem ersten Argument von ab
query
. Es ist nicht erforderlich, "Header" einzuschließen, was sich selbst wiederholte.Version 1: Header im Abfragebereich enthalten
Ich bevorzuge es, die Kopfzeilen in den an die Abfrage übergebenen Bereich aufzunehmen und die Anzahl der Kopfzeilen als drittes Argument von anzugeben
query
. Dies vermeidet eine Fehlinterpretation von Daten als Header oder umgekehrt. Zum Beispiel:Hier ist die benutzerdefinierte Funktion, die mit der obigen Abfrage verwendet werden soll:
Die Funktion erhält die Formel aus der Zelle, aus der sie aufgerufen wurde. Es extrahiert das erste Bereichsargument der Formel mit einem regulären Ausdruck. Dann durchsucht es die erste Zeile dieses Bereichs , vorausgesetzt, es ist die Kopfzeile, auf der Suche nach der angegebenen Zeichenfolge. Es erhält die A1-Notation der Zelle mit der Zeichenfolge, entfernt den Zeilenteil davon und gibt das Ergebnis zurück.
Version 2: Header aus Zeile 1
Eine alternative Version, bei der die Überschriften unabhängig von den Zeilen im Abfrageargument aus der ersten Zeile des Blattes stammen. Einfach ersetzen
mit
Mit dieser Version können Sie verwenden
quelle
Loading...
Problem, das gelöst werden kann) Löschen und erneutes Einfügen der Funktion).Ich mag die Antwort von user79865 sehr. Wenn Sie es verwenden möchten und ein anderes Gebietsschema als US haben (wie mein polnisches), haben Sie möglicherweise ein anderes Trennzeichen für Funktionsargumente in Sheets. Und statt:
Sie könnten haben (
;
anstelle von,
):In diesem Fall sollte der reguläre Ausdruck in Funktion (Version 1), Zeile 4, geändert werden von:
zu:
Wenn sich Ihre Daten in einem separaten Blatt befinden (aber in derselben Tabelle), können Sie den regulären Ausdruck ändern, um nach dem Blattnamen zu suchen und ihn zur Suche nach Spaltennamen zu verwenden:
Ich möchte einen Kommentar hinzufügen, aber als Anfänger kann ich keinen Kommentar abgeben ...
quelle