Aktive Zelle auslesen mit einem Google Tabellen Script
In dem Video – Tutorial unten zeige ich Euch wie Ihr mit Google Tabellen Script die aktive Zelle auslesen könnt und die Daten in einer anderen Zelle ausgeben könnt. Das interessante an diesem Script ist übrigens auch das es aufgerufen wird wenn sich in der Tabelle etwas ändert. Dafür sorgt die Funktion onEdit.
Wie Ihr seht macht mir das Programmieren mit Google Script richtig Spaß und das erstellen von Tutorials reißt bei mir im Moment nicht ab. Ich denke das Ihr da noch einiges zu erwarten habt. Wenn Ihr weitere Ideen für Tutorials habt oder an einem Punkt nicht weiter kommt dann sagt ruhig bescheid, ich werde dann meinen Focus mehr in diese Richtung lenken und wenn es die Zeit zulässt natürlich gerne entsprechende Tutorials erstellen. Im Moment habe ich zwar schon eine ziemlich umfangreiche TODO – Liste und Ideen zu Tutorials , aber ob das wirklich andere interessiert erfahre ich immer erst viel später nämlich durch die Anzahl der Aufrufe 😉
Dieses Video – Tutorial ist für Anfänger gedacht die sich im Umgang von Google Tabellen Script noch nicht so auskennen und dementsprechend wird es auch in sehr einfacher Form präsentiert. Ihr lernt in diesem Video natürlich auch wie das Script der Tabelle über den Scripteditor hinzugefügt wird.
Das dazugehörige Video – Tutorial befindet sich weiter unten und Ihr könnt es entweder hier schauen oder direkt bei YouTube.
Hier das Script "Aktive Zelle auslesen" zum kopieren.
// Funktion die bei einer Änderung aufgerufen wird. function onEdit(e){ // ruft die Hauptfunktion auf infosAktiveZelle(); } // Hauptfunktion function infosAktiveZelle(){ // zuweisen der aktuellen Position in die Variable aktivePosition var aktivePosition=SpreadsheetApp.getActiveRange().getA1Notation(); // zuweisen des Wertes von der aktuellen Position in die Variable aktivePositionWert var aktivePositionWert=SpreadsheetApp.getActiveRange().getValue(); // Ausgabe der aktuellen Position in Zelle A2 SpreadsheetApp.getActiveSheet().getRange("A2").setValue(aktivePosition); // Ausgabe des Wertes der aktuellen Position in Zelle B2 SpreadsheetApp.getActiveSheet().getRange("B2").setValue(aktivePositionWert); }
Die Benutzung des Scriptes erfolgt natürlich wie immer auf eigene Gefahr.
Euch gefällt die Datei und Ihr wollt Euch unbedingt bedanken?
Hier ist meine AMAZON – Wunschliste [HIER KLICKEN] 😉
Das könnte Dich auch interessieren
- Daten anderer Tabellen kopieren (Google Tabellen Script)
- Daten mit Script an den Listenanfang verschieben (Google Tabellen Script)
- Einfügen oder löschen einzelner Zellen bei Google Tabellen
- Einfügen oder löschen von Zellbereichen (Google Tabellen Script)
- Hallo Welt in Google Tabellen Script
- Kalender mit Tabelle verbinden / verknüpfen (Google Tabellen Script)
- Tutorials über Google Tabellen Script - Programmierung
- Vergleichen der Werte von Zellen mit Google Tabellen Script
- Wertebereich einer Zelle mit Google Tabellen Script überprüfen
- Zeitstempel programmieren in Google Tabellen
- Übersichts-Liste der GOOGLE Tabellen Script Tutorials
22 Comments
Hallo Chris, zu diesem Toptorial habe ich noch eine Frage: Kann man auch eine ganze Zeile auslesen und diese dann unter die letzte – in der Tabelle vorhandenen Zeile – einfügen? Ziel ist, immer den Inhalt der vorherigen Zeile 1:1 unter die letzte Zeile noch einmal einzuifügen.
Herzlichen Dank.
Schau Dir mal den nachfolgenden Code an. Damit kannst Du die gerade bearbeitete Zeile in die letzte Zeile kopieren. Allerdings wird nach jeder Änderung einer Zelle das ganze nach unten kopiert wenn Du wie im Beispiel den Funktions-Aufruf in onEdit lässt.
Die 50 im Bereich von getRange gibt die Anzahl der zu kopierenden Spalten an. Hier kannst Du den Wert ja entsprechend anpassen.
Ansonsten gibt es noch die Funktionen moveTo und copyTo.
var aktiveZeile=SpreadsheetApp.getActiveRange().getRow();
var ganzeZeile=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(aktiveZeile,1,1,50).getValues();
SpreadsheetApp.getActiveSheet().getRange((SpreadsheetApp.getActiveSheet().getLastRow()+1),1,1,50).setValues(ganzeZeile);
Hallo,
prima, Deine Tutorials, danke!
Ich möchte in einer Zelle einen Wert aus einem Dropdown Katalog auswählen und dann in der Zelle rechts daneben das (Änderungs-) Datum eintragen. Wie kann ich das am besten bewerkstelligen?
Danke!
Gruß
kraeMit
In dem Tutorial steckt eigentlich schon fast alles drin was Du brauchst.
https://toptorials.com/zeitstempel-mit-benutzer-als-notiz-google-tabellen-script/
Das ganze kannst Du dann noch in eine IF Abfrage packen um nur bestimmte Daten zu filtern.
Gruß
Chris
onEdit(e) funktioniert doch auch ohne e also onEdit()
Was sollte das e denn anders machen?
Ist nur sehr verzögert bei mir.
Und arbeitet NUR wenn ich MIN 1 Zeichen/Buchstabe/o.Zahl tippe und ENTER bzw. EINGABE drücke!
Gibt es da nichts anderes dass z.B. auch auslöst wenn man eine Formatierung anpasst?
Hi Dirk, mit dem e werden weitere Daten übertragen die ausgelesen werden können. Das heißt, wenn Du also eine Zelle editiert hast, wird die Funktion aufgerufen und mit dem e Daten mit übertragen die Du auswerten kannst.
Zum Beispiel um welchen Bereich es sich handelt. Schau Dir dazu mal die API Referenz an:
Google Tabellen Trigger
Noch etwas. Ich habe Dir bereits geschrieben dass ich es nicht schaffe weiterführende Fragen zu beantworten. Das steht bei YouTube in der Kanalinfo und hier muss ich dass wohl auch noch einmal etwas mehr hervorheben. Ich schaffe es nur noch direkt auf Fragen zu den Tutorials zu antworten wenn dort jemand nicht weiter kommt. Bei YouTube war mir das gestern zu viel, vor allem auch wegen der Verlinkung zu anderen Seiten. Hier lasse ich Deine auch großen Scripte mit den Fragen erst einmal drin damit sich auch andere damit beschäftigen können und Dir vielleicht dazu Hilfestellung geben. Ich schaffe das wie gesagt zeitlich nicht und wenn die Frage über zu viele Zeilen hinweg gehen dann fange ich erst gar nicht an zu lesen. Das war im vorangegangen Kommentar mit Step by Step gemeint. Kurze Fragen so wie diese lese ich mir durch und kann ich zwischendurch, wenn es die Zeit zulässt auch mal beantworten. Die Durcharbeitung von einem Script wie den Kommentar den ich gerade von Dir gesehen habe (im Bereich "Daten anderer Tabellen kopieren") werde ich mir heute nicht mehr durchlesen, werde ihn aber für andere zum Lesen zumindest freigeben.
Hätte ich keinen Fulltimejob und entsprechend mehr Freizeit dann würde es vielleicht anders aussehen.
Viele Grüße
Chris
OK Schade!
ff. nur als Kommentar gemeint:
Stepp by Step? z.B. so >warum kann ich nicht (Blatt3,1,26,1,200) so schreiben (Blatt3,A1:X200)? Wäre verständlich???
Der Links (und die anderen erhaltenen) helfen mir nur äusserst begrenzt bis gar nicht wegen den Englisch Kenntnissen und google übersetzt keine Formeln oder Fachausdrücke. ABER DANKE! Werd ich mir anschauen.
So ab jetzt nur noch Kommentare direkt zum Tutorial 😉
aber eine zu beantworten>
Hilft es dir wenn ich überall like? Oder nur als Resonanz die dich froh stimmt? <in dem Fall fühl dich auf allen Videos geliked! Im Ernst!
Muss mich dann leider auch erst mal ums "schwierige" weiter kommen kümmern. Werde mich aber bemühen zumindest die ich mir noch/nochmal ansehe zu liken.
Mach Dir keinen Stress wegen den Likes, wenn Du mal ein Tutorial von mir siehst was Dir gefällt kannst Du das gerne machen, aber das ist natürlich kein muss.
Das mit dem Englischen ist natürlich schwierig und da muss ich mich auch ab und zu durchkämpfen. Wenn Du einige Script Tutorials von mir gesehen hast, weißt Du ja bereits dass ich kein Profi bin sondern eher noch der Anfänger auch wenn es hier und da vielleicht anders aussieht. Wenn Du Dich ein bisschen eingearbeitet hast, dann wirst Du viele der Funktionen die Du gerne hättest komplett selbst erstellen. Auch die Angabe vom Bereich den Du als Beispiel gerade erwähnt hast. Hier gibt es aber oft auch schon mehrere Varianten. Der Link zur Referenz zeigt Dir genau auf welche Möglichkeiten Dir zur Verfügung stehen. Wenn Du einen Befehl siehst, dann schaue dort einfach mal nach welche Varianten es davon gibt. Schau Dir einfach mal diesen Link und die danach folgenden Möglichkeiten von getRange an. Damit siehst Du das es schon vieles gibt. Wenn ich eine Frage erhalte mache ich auch nichts anderes als in die Referenz zu schauen ob es eine Möglichkeit gibt:
Referenz zu getRange
Die Recherchen dauern aber immer etwas. Genauso findet man sehr viele Sachen bereits schon im Netz die sehr viel Ähnlichkeit haben mit Scripten die man vielleicht selbst gerade programmieren möchte. Hier suche ich auch sehr oft und kombiniere das mit anderen Scripten. Dafür stehen diese ja im Netz, damit man nicht alles alleine machen muss. Aus den vielen Scripten kann man auch eine Menge Ideen mitnehmen und sehr viel lernen. Am Besten die kleinen Scripte anschauen, ausprobieren und Änderungen vornehmen um zu sehen ob es so läuft wie man sich das vorstellt und auch um zu sehen ob man das richtig verstanden hat. Nach und nach die Projekte erweitern.
Viele Grüße
Chris
Google Excel, hallo ich möchte gerne, wenn ich von Spalte (A) im "Datenvaldierungsauswahl" den Eintrag Storno wähle, soll es den aktuellen Betrag bei Spalte (E), auf null ändern. Ich habe jetzt sehr lange geübt und schaffe es einfach nicht. Diese Funktion sollte bei jeder beliebigen spalte (A) funktionieren und der Betrag ist immer auf der Spalte (E). DANKE
Wie sieht denn die Formel aus die Du bisher erstellt hast? Man kann es auch mit einem Script lösen (weil Du hier auf einem Beitrag kommentierst der mit Programmierung zu tun hat) allerdings reicht dafür die Funktion WENN aus.
Mit der WENN Funktion kannst Du einen Begriff eingeben und über weitere Parameter festlegen was passieren soll wenn der Begriff gefunden wird und auch festlegen was passieren soll wenn der Begriff nicht gefunden wird. Zusätzlich kannst Du auch eine verschachtelte WENN Funktion nutzen falls Du mehrere Begriffe hast die unterschiedliche Berechnungen durchführen sollen:
Verschachtelte WENN Funktion für Excel:
Verschachtelte WENN Funktion ganz einfach (Excel)
Verschachtelte Arrayformel in Verbindung mit der WENN Funktion:
Arrayformel mit verschachtelter WENN Funktion in Excel
Hallo Chris,
ich will eine Wertentwicklung darstellen. Ich hole mir über Googlefinance alle Werte und möchte dann auf einen weiteren Tabellenblatt die Entwicklung darstellen.
Also jeden Abend um 24:00 soll der Wert auf dem neuen Tabellenblatt gespeichert werden. Somit erhalte ich einen Werteverlauf.
Die Werte sollten bestenfalls alle untereinander stehen.
Kannst du mir sagen wie ich das umsetzen kann?
Hallo Chris,
das würde mich auch interessieren, aber ich möchte das ganze noch so, dass der WERT A aus TABELLE A in TABELLE B geschrieben wird. Also ungefähr so:
TABELLE A:
In A1 steht am 01.01.2022 = 3000
In A1 steht am 02.01.2022 = 2850
In A1 steht am 03.01.2022 = 3100 usw.
Ich möchte erreichen, das einmal am Tag diese A1 Zelle ausgelesen wird und in TABELLLE B fortlaufend geschrieben wird, mit Datum
TABELLE B:
A1 = DATUM – B1 = WERT
A2 = 01.01.202 – B2 = 3000
A3 = 02.01.2022 – B3 = 2850
A3 = 03.01.2022 – B4 = 3100 usw.
Wäre schön, wenn Du uns hier einen Ansatz hättest.
Gruß H-BLOGX
Hallo Cris,
danke für dein Toptutorial!
Gerne würde ich wissen ob man die Funktion auch so anpassen kann, dass man nur eine Zelle auswertet. Also ich lege die Zelle in der ich die Änderung sehen möchte selber fest. Mir ist leider unklar welche Notation gilt wenn ich "getActiveRange()" einfach durch einen statischen Wert ersetzen möchte.
Konkret hab ich eine Funktion die ein JSON-File auswertet und mir die Zellen beschreibt. Wird der JSON Feed neu ausgewertet verschwinden für einige Sekunden alle JSON-Basierte-Werte aus der Tabelle, bis die Auswertung durch ist. Nun würde ich gerne eingetragenen Werte solange festhalten, bis die Aktualisierung abgeschlossen ist. Mein Tigger könnte z.B. sein, dass eine Zelle beschrieben ist (z.B. mit dem Counter der Datensets). Die Zellen sind dann eine Art zwischen Speicher. Das modifizierte Skript hält den alten Wert also solange in einer Zelle bis die Eingabe abgeschlossen ist.
Danke im Voraus
Hallo ich hoffe mal, dass die Seite weite so toll moderiert wird.
mit
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var Rango4 = sheet.setActiveCell("d4"); // Temporal
Rango4.setFormula('=SUBSTITUTE(textjoin(",";true;A1:A100);",,";"")');
}
verkette ich die Werte der Zellen A1:A100 und ersetzte dann die doppelten Kommatas
Allerdings habe ich dann in der Zelle auch die Formel stehen
=SUBSTITUTE(textjoin(",";true;A1:A100);",,";"")
Mich interessieren aber ausschliesslich die (Text-)Werte in der Zelle.
Irgendwie komme ich nicht weiter. Hat jemand eine Idee?
Vielen Dank
Peter
Hallo Chris und mit Kommentierer
ich schaue seit Stunden die Videos um mich fortzubilden und verstehe schon einiges, da in Google Tabelle scripten ganz neu.
doch ich komme nicht auf die Lösung meines Problems, leider. Ich möchte gerne zwei Script erstellen das die Zelle ausliest und den enthalten Wert um eins erhöht bei jedem Durchgang oder eben das zweite Script verringert um 1 beim ausführen.
könnte mir jemand helfen.
vielen dank im vorraus
viele Grüße
Lydia
Hallo Chris und Mitkommentierer
ich schaue seit Stunden die Videos um noch was zu lernen. Doch finde ich nicht die Lösung für mein Problem ich möchte gerne zwei Scripts schreiben, das eine soll bei Durchführung die Zelle auslesen und um 1 erhöhen und das andere soll den wert um 1 senken.
kann mir jemand helfen?
vielen Dank im vorraus
viele Grüße
Lydia
Hallo Chris und hallo an alle Interessierten hier.
Chris, Deine Tutorials haben mir schon sehr viel beigebracht und ich habe auch sehr viel umgesetzt. Nun stoße ich bei einem Thema an meine Grenzen.
Als Ehrenamtler in einem Verein stelle ich unseren Busfahrern eine Tabelle zur Verfügung, in der sich jeder für einen bestimmten Tag und Uhrzeit für einen Fahrdienst eintragen kann. Es handelt sich überwiegen um Leute, die mit IT nicht auf Du und Du sind. Soweit klappt alles sehr gut, aber es kommt immer wieder vor, dass jemand aus Versehen ein neues Tabellenblatt anlegt. Das sollte jedoch nicht passieren und nun meine Frage: Wie kann ich das verhindern?
Ich hatte vermutet, dass es zum Objekt "Spreadsheet' eine Methode gibt, mit der man das Hinzufügen von neuen Tabellenblättern verhindern kann.
Hast Du Chris eine Lösung, oder hat jemand anderes hier dazu etwas Hilfreiches?
vielen Dank im voraus.
liebe Grüße
Werner
Hi Chris, gibt es die Möglichkeit onEdit so einzusetzen das es angesprochen wird wenn ich eine bestimmte Zelle ändere ? MfG
Hallo,
sehr interessant und hilfreich was du hier so veröffentlichst. Dafür erstmal ein dickes Danke.
ich bin dabei deine Funktion auf meinen Bedarf abzuändern.
Ich möchte mit Hilfe einer generierten Schaltfläche die aktive Zelle um den Wert 1 erhöhen.
Mit -1 Funktioniert es, mit +1 wird der Wert der aktiven Zelle auch um 1 reduziert.
Wo ist mein Gedankenfehler? (Habe die Zelle zur Anzeige der Positionen an 2 feste Stellen gesetzt.)
Hier der Code für +1:
// Funktion die bei einer Änderung aufgerufen wird.
function onEdit(e){
// ruft die Hauptfunktion auf
infosAktiveZelle();
}
// Hauptfunktion
function infosAktiveZelle(){
// zuweisen der aktuellen Position in die Variable aktivePosition
var aktivePosition=SpreadsheetApp.getActiveRange().getA1Notation();
// zuweisen des Wertes von der aktuellen Position in die Variable aktivePositionWert
var aktivePositionWert=SpreadsheetApp.getActiveRange().getValue();
// Ausgabe der aktuellen Position in Zelle A2
SpreadsheetApp.getActiveSheet().getRange("I12").setValue(aktivePosition);
// Ausgabe des Wertes der aktuellen Position in Zelle B2
SpreadsheetApp.getActiveSheet().getRange(aktivePosition).setValue((aktivePositionWert)+1);
}
Und hier für -1:
// Funktion die bei einer Änderung aufgerufen wird.
function onEditb(e){
// ruft die Hauptfunktion auf
infosAktiveZelle();
}
// Hauptfunktion
function infosAktiveZelle(){
// zuweisen der aktuellen Position in die Variable aktivePosition
var aktivePosition=SpreadsheetApp.getActiveRange().getA1Notation();
// zuweisen des Wertes von der aktuellen Position in die Variable aktivePositionWert
var aktivePositionWert=SpreadsheetApp.getActiveRange().getValue();
// Ausgabe der aktuellen Position in Zelle A2
SpreadsheetApp.getActiveSheet().getRange("J12").setValue(aktivePosition);
// Ausgabe des Wertes der aktuellen Position in Zelle B2
SpreadsheetApp.getActiveSheet().getRange(aktivePosition).setValue((aktivePositionWert)-1);
}
Über eine Rückmeldung würde ich mich freuen.
LG Heini
So, nach Sicht des Videos habe ich den Fehler selbst entdeckt und behoben.
So funktioniert es jetzt:
+1
// Hauptfunktion
function infosAktiveZelle(){
// zuweisen der aktuellen Position in die Variable aktivePosition
var aktivePosition=SpreadsheetApp.getActiveRange().getA1Notation();
// zuweisen des Wertes von der aktuellen Position in die Variable aktivePositionWert
var aktivePositionWert=SpreadsheetApp.getActiveRange().getValue();
// Ausgabe der aktuellen Position in Zelle A2
SpreadsheetApp.getActiveSheet().getRange("J11").setValue(aktivePosition);
// Ausgabe des Wertes der aktuellen Position in Zelle B2
SpreadsheetApp.getActiveSheet().getRange(aktivePosition).setValue((aktivePositionWert)+1);
}
-1
// Hauptfunktion
function infosAktiveZelle2(){
// zuweisen der aktuellen Position in die Variable aktivePosition
var aktivePosition=SpreadsheetApp.getActiveRange().getA1Notation();
// zuweisen des Wertes von der aktuellen Position in die Variable aktivePositionWert
var aktivePositionWert=SpreadsheetApp.getActiveRange().getValue();
// Ausgabe der aktuellen Position in Zelle A2
SpreadsheetApp.getActiveSheet().getRange("J12").setValue(aktivePosition);
// Ausgabe des Wertes der aktuellen Position in Zelle B2
SpreadsheetApp.getActiveSheet().getRange(aktivePosition).setValue((aktivePositionWert)-1);
}
Danke für deine hilfreichen Tutorials!!
Super, freut mich dass Du den Fehler selbst beheben konntest. Leider fehlt mir die Zeit, sonst würde ich natürlich gerne wieder mehr im Bereich Programmierung machen und hätte dann auch mal diesen Code getestet.
Viele Grüße
Chris
Hallo Chris, kein Problem. Bei mir funktioniert es wie gewollt. Die Funktion On Edit war das Problem. Nach deiner Erklärung im Video dazu, war mir klar, dass ich die rausschmeißen muss. Läuft, danke.