Skip to content

Alles für WordPress, Webentwicklung — und mehr

👌 Mehrfachauswahl in Google Sheets: Skript für Zellen mit Datenvalidierung

👌 Mehrfachauswahl in Google Sheets: Skript für Zellen mit Datenvalidierung

Ein Dropdown-Menü in Google Sheets ist eine praktische Funktion. Richten Sie die Datenvalidierung ein, und die Zelle akzeptiert nur Werte aus einem Bereich. Aber es gibt einen Haken: Sie können nur einen Eintrag auswählen. Was, wenn Ihre Aufgabe ein Tag wie urgent, budget, design erfordert, also drei Werte in einer Zelle? Mit den Standardwerkzeugen ist das nicht möglich.

In der Praxis taucht dieser Bedarf ständig auf: Ausgaben kategorisieren, Aufgaben taggen, Teilnehmer auflisten. Jedes Mal den Editor zu öffnen und Werte durch Kommas getrennt hinzuzufügen, kostet Zeit. Die Lösung ist ein kleines Google Apps Script, das eine Seitenleiste mit Kontrollkästchen für einen beliebigen Datenvalidierungsbereich hinzufügt.

Nachfolgend die schrittweise Einrichtung: vom Erstellen der Skriptdatei bis zu einem fertigen Menü „Scripts" in Ihrer Tabelle. Der Code wurde an realen Tabellen getestet, funktioniert ohne zusätzliche Berechtigungen und erfordert keine Programmierkenntnisse.

💡 Kurzer Überblick:

  • Richten Sie die Datenvalidierung für eine Zelle nach Bereich ein und wählen Sie, eine Warnung anzuzeigen, statt die Eingabe abzulehnen
  • Erstellen Sie zwei Dateien im Skripteditor: multi-select.gs mit der Logik und dialog.html mit der Seitenleisten-Oberfläche
  • Speichern Sie das Projekt, aktualisieren Sie die Tabelle, und der Menüpunkt „Scripts" erscheint
  • Wählen Sie eine Zelle mit Datenvalidierung aus, führen Sie das Skript aus und wählen Sie die gewünschten Werte per Kontrollkästchen
  • Klicken Sie auf „Select", und die Zelle wird mit den ausgewählten, durch Kommas getrennten Einträgen gefüllt

Schritt 1: Tabelle und Datenvalidierung vorbereiten

Öffnen Sie die Google-Tabelle, mit der Sie arbeiten. Wählen Sie die Zielzelle (oder den Zielbereich) aus und richten Sie die Datenvalidierung ein: Daten → Datenvalidierung. Wählen Sie im Feld „Kriterien" die Option „Liste aus einem Bereich" und geben Sie die Liste an, aus der die Optionen gezogen werden sollen.

Wichtiger Punkt: Aktivieren Sie nicht „Eingabe ablehnen", denn dann kann das Skript keine mehrfachen, durch Kommas getrennten Werte in die Zelle schreiben. Eine Warnung anzuzeigen ist ausreichend.

Wenn Sie keinen fertigen Bereich haben, erstellen Sie ein separates Blatt „Referenz" und listen Sie dort alle erlaubten Werte in einer Spalte auf. Verweisen Sie in der Datenvalidierung auf diesen Bereich.

Schritt 2: Apps Script erstellen

Im Tabellenmenü: Erweiterungen → Apps Script. Der Editor öffnet sich mit einem leeren Tab und einer leeren Datei. Zuerst erstellen wir den serverseitigen Teil.

Klicken Sie auf Datei → Neu → Skriptdatei. Nennen Sie sie multi-select.gs und fügen Sie den Code ein:

1function onOpen(e) {
2 SpreadsheetApp.getUi()
3 .createMenu('Scripts')
4 .addItem('Multi-select for this cell...', 'showDialog')
5 .addToUi();
6}
7
8function showDialog() {
9 var html = HtmlService.createTemplateFromFile('dialog').evaluate();
10 SpreadsheetApp.getUi()
11 .showSidebar(html);
12}
13
14var valid = function() {
15 try {
16 return SpreadsheetApp.getActiveRange()
17 .getDataValidation()
18 .getCriteriaValues()[0]
19 .getValues();
20 } catch(e) {
21 return null;
22 }
23};
24
25function fillCell(e) {
26 var s = [];
27 for (var i in e) {
28 if (i.substr(0, 2) == 'ch') s.push(e[i]);
29 }
30 if (s.length) SpreadsheetApp.getActiveRange().setValue(s.join(', '));
31}

Was hier passiert: onOpen fügt den Punkt „Multi-select for this cell…" zum benutzerdefinierten Menü der Tabelle hinzu. showDialog öffnet die Seitenleiste mit der HTML-Oberfläche. Die Funktion valid extrahiert die Liste der erlaubten Werte aus der Datenvalidierung der aktiven Zelle. Und fillCell sammelt die angehakten Kontrollkästchen ein und schreibt sie durch Kommas getrennt in die Zelle.

Hinweis: i.substr(0, 2) filtert nur die Parameter, deren Name mit ch beginnt, das sind die Kontrollkästchen-Bezeichner aus dem HTML-Formular. Andere Parameter werden ignoriert.

Klicken Sie auf Datei → Speichern (oder Strg+S). Beim ersten Speichern fragt das Skript Berechtigungen ab, das ist normal, ohne diese kann es keine Zelldaten lesen und die Seitenleiste nicht anzeigen.

Schritt 3: HTML-Oberfläche hinzufügen

Jetzt erstellen wir die Seitenleiste selbst. Im selben Editor: Datei → Neu → HTML-Datei. Nennen Sie sie dialog.html und fügen Sie ein:

1<div style="font-family: sans-serif;">
2 <? var data = valid(); ?>
3 <form id="form" name="form">
4 <? if (Object.prototype.toString.call(data) === '[object Array]') { ?>
5 <? for (var i = 0; i < data.length; i++) { ?>
6 <? for (var j = 0; j < data[i].length; j++) { ?>
7 <input type="checkbox"
8 id="ch<?= '' + i + j ?>"
9 name="ch<?= '' + i + j ?>"
10 value="<?= data[i][j] ?>">
11 <?= data[i][j] ?><br>
12 <? } ?>
13 <? } ?>
14 <? } else { ?>
15 <p>This cell has no
16 <a href="https://support.google.com/drive/answer/139705?hl=en">Data validation</a>.
17 </p>
18 <? } ?>
19 <input type="button" value="Select"
20 onclick="google.script.run.fillCell(this.parentNode)" />
21 <input type="button" value="Refresh validation"
22 onclick="google.script.run.showDialog()" />
23 </form>
24</div>

Die Logik ist einfach: Der serverseitige Tag <? var data = valid(); ?> ruft die Funktion valid() aus der GS-Datei auf und erhält ein Array der erlaubten Werte. Wenn ein Bereich angegeben ist, werden Kontrollkästchen gerendert, eines für jeden Wert. Die Schaltfläche Select sendet das Formular an fillCell, die Schaltfläche Refresh validation liest die Datenvalidierung erneut ein (praktisch beim Wechsel zwischen Zellen).

Wenn die ausgewählte Zelle keine Datenvalidierung hat, zeigt das Panel eine Meldung mit einem Link zur Google-Hilfe an.

Speichern Sie die Datei: Datei → Speichern. Beide Dateien (multi-select.gs und dialog.html) sollten sich im selben Projekt befinden.

Schritt 4: Ausführen und Nutzen

Kehren Sie zur Tabelle zurück und aktualisieren Sie die Seite. Nach ein paar Sekunden erscheint ein neuer Menüpunkt Scripts in der Menüleiste, das ist das Ergebnis von onOpen.

Nun der Arbeitsablauf:

  • Wählen Sie eine beliebige Zelle aus, für die eine Datenvalidierung nach Bereich konfiguriert ist.
  • Gehen Sie zu Scripts → Multi-select for this cell….
  • Rechts öffnet sich eine Seitenleiste mit einer Liste von Kontrollkästchen, alle Werte aus Ihrem Validierungsbereich.
  • Haken Sie die gewünschten Einträge an und klicken Sie auf Select.
  • Die Zelle wird mit den ausgewählten Werten, durch Kommas getrennt, gefüllt: urgent, budget, design.

Sie müssen die Seitenleiste nicht schließen. Klicken Sie einfach eine andere Zelle an (ebenfalls mit Datenvalidierung) und klicken Sie auf Refresh validation, die Kontrollkästchen-Liste aktualisiert sich für die neue Zelle.

Skript-Seitenleiste mit Kontrollkästchen zur Werteauswahl

Im Screenshot das Ergebnis: eine Zelle mit Datenvalidierung, eine Seitenleiste mit aktiven Kontrollkästchen und das Menü „Scripts" in der Menüleiste. Genau so sieht die Lösung in Aktion aus.

Schritt 5: Was sich verbessern lässt

Das Basisskript löst die Aufgabe „Mehrere Werte aus einer Dropdown-Liste auswählen", und für die meisten Szenarien ist das ausreichend. Wenn Sie jedoch intensiv mit der Tabelle arbeiten, gibt es ein paar Verbesserungsmöglichkeiten:

  • „Alle auswählen" / „Auswahl aufheben" hinzufügen. Zwei Schaltflächen im HTML-Formular, die programmatisch alle Kontrollkästchen aktivieren oder deaktivieren. Ein paar Zeilen in JavaScript, und Sie sparen sich ein Dutzend Klicks bei einem großen Bereich.
  • Das Komma durch ein anderes Trennzeichen ersetzen. In der Funktion fillCell verbindet die Zeile s.join(', ') die Werte mit einem Komma. Wenn Ihre Daten Kommas als Teil des Wertes enthalten, ersetzen Sie es durch ; oder |.
  • Automatische Aktualisierung bei Zellwechsel. Anstatt manuell auf „Refresh validation" zu klicken, können Sie einen Trigger an das Zellauswahl-Ereignis (onSelectionChange) anhängen, aber das erfordert etwas komplexeren Code und eine manuelle Trigger-Installation.

Der Quellcode des Skripts ist eine Adaption der Lösung von Alexander Ivanov, veröffentlicht von Arthur Attwell auf GitHub Gist. Dort finden Sie auch Community-Diskussionen und Verbesserungen.

Nachfolgend eine Video-Anleitung auf Englisch, falls Sie lieber zuschauen als lesen:

⁉️🤔 Häufig gestellte Fragen

Das Skript erscheint nach dem Speichern nicht im Menü. Was soll ich tun?

Aktualisieren Sie die Tabellenseite (F5 oder Strg+R). Wenn das nicht hilft, prüfen Sie, ob die Funktion exakt onOpen heißt (Groß-/Kleinschreibung beachten) und ob keine Fehler im Skripteditor vorliegen: Ansicht → Logs zeigt den Stacktrace. Manchmal hilft es, den Skripteditor zu schließen und erneut zu öffnen.

Die Seitenleiste öffnet sich, aber es gibt keine Kontrollkästchen, nur eine Meldung zur Datenvalidierung.

Das bedeutet, die ausgewählte Zelle hat keine Datenvalidierung nach Bereich. Wählen Sie die Zelle aus, für die Sie in Schritt 1 die Validierung konfiguriert haben. Wenn die Validierung für einen Zellbereich statt für eine einzelne Zelle konfiguriert ist, stellen Sie sicher, dass die aktive Zelle genau diejenige ist, die im Bereich liegt.

Kann das Skript auf mehreren Blättern in einer Tabelle verwendet werden?

Ja. Das Skript ist an den Container (die Tabelle) gebunden, nicht an ein bestimmtes Blatt. Die Datenvalidierung funktioniert auf Blattebene, konfigurieren Sie sie auf den benötigten Blättern, und die Seitenleiste übernimmt die Werte aus der aktiven Zelle, unabhängig vom Blatt.

Nach der Auswahl der Werte zeigt die Zelle einen Fehler „Ungültiger Wert" an.

Sie haben in den Datenvalidierungseinstellungen „Eingabe ablehnen" aktiviert. Gehen Sie zurück zu Daten → Datenvalidierung und wählen Sie „Warnung anzeigen" anstelle von „Eingabe ablehnen". Wenn die Daten kritisch sind, belassen Sie die Warnung, sie blockiert das Schreiben durch das Skript nicht.

Das Skript fordert Zugriff auf das Google-Konto an, ist das sicher?

Ja. Berechtigungen werden benötigt für SpreadsheetApp.getActiveRange() (Lesen von Zelldaten) und SpreadsheetApp.getUi() (Anzeige von Menü und Seitenleiste). Das Skript funktioniert nur innerhalb Ihrer Tabelle und hat keinen Zugriff auf andere Dateien auf Drive. Die vollständige Liste der Berechtigungen ist im Autorisierungsfenster sichtbar.

Welches Multi-Select-Skript Sie in Ihrer Tabelle installieren sollten

Die beschriebene Lösung ist ein minimales, funktionierendes Grundgerüst. Zwei Dateien, keine einzige externe Bibliothek, klare Logik. Für die Ausgabenverfolgung, Aufgaben-Tagging und alle Szenarien, in denen Sie mehrere Werte aus einer Referenzliste in eine Zelle schreiben müssen, ist sie mehr als ausreichend.

Wenn Sie intensiv mit Google Sheets arbeiten, werfen Sie einen Blick in die Apps Script-Dokumentation. Die Möglichkeiten gehen weit über Kontrollkästchen hinaus: automatischer E-Mail-Versand bei Zelländerungen, Generierung von Dokumenten aus Vorlagen, Integration mit Google Calendar. Beginnen Sie mit diesem Skript, und wer weiß, vielleicht schreiben Sie bald Ihre eigenen Automatisierungen.