
👌 Flerval i Google Sheets: skript för celler med datavalidering
En rullgardinslista i Google Sheets är en praktisk funktion. Ställ in datavalidering, så accepterar cellen bara värden från ett intervall. Men det finns en hake: du kan bara välja ett alternativ. Vad gör du om din uppgift behöver taggen urgent, budget, design, tre värden i en cell? Med standardverktygen går det inte.
I praktiken uppstår det här behovet hela tiden: kategorisera utgifter, tagga uppgifter, lista deltagare. Att öppna redigeraren varje gång och lägga till värden separerade med kommatecken slösar tid. Lösningen är ett litet Google Apps Script som lägger till ett sidofält med kryssrutor för valfritt datavalideringsintervall.
Här följer en steg-för-steg-guide: från att skapa scriptfilen till en färdig "Scripts"-meny i ditt kalkylark. Koden har testats på riktiga kalkylark, fungerar utan extra behörigheter och kräver inga programmeringskunskaper.
💡 Snabb översikt:
- Ställ in datavalidering för en cell via intervall och välj att visa en varning istället för att avvisa inmatning
- Skapa två filer i scriptredigeraren:
multi-select.gsmed logik ochdialog.htmlmed sidofältsgränssnittet - Spara projektet, uppdatera kalkylarket, så visas menyvalet Scripts
- Markera en cell med datavalidering, kör scriptet och kryssa i önskade värden med kryssrutor
- Klicka på Select, så fylls cellen med de valda alternativen separerade med kommatecken
Steg 1: Förbered kalkylarket och datavalideringen
Öppna det Google-kalkylark du arbetar med. Markera målcellen (eller intervallet) och ställ in datavalidering: Data → Datavalidering. I fältet "Kriterier" väljer du "Lista från ett intervall" och anger listan som alternativen ska hämtas från.
Viktig punkt: aktivera inte "Avvisa indata", för om du gör det kan scriptet inte skriva flera kommaseparerade värden till cellen. Att visa en varning räcker.
Om du inte har ett färdigt intervall, skapa ett separat "Referens"-blad och lista alla tillåtna värden i en kolumn där. Referera till detta intervall i datavalideringen.
Steg 2: Skapa Apps Script
I kalkylarkets meny: Tillägg → Apps Script. Redigeraren öppnas med en tom flik och en tom fil. Först skapar vi serverdelen.
Klicka på Arkiv → Ny → Skriptfil. Döp den till multi-select.gs och klistra in koden:
1 function onOpen(e) { 2 SpreadsheetApp.getUi() 3 .createMenu('Scripts') 4 .addItem('Multi-select for this cell...', 'showDialog') 5 .addToUi(); 6 } 7 8 function showDialog() { 9 var html = HtmlService.createTemplateFromFile('dialog').evaluate(); 10 SpreadsheetApp.getUi() 11 .showSidebar(html); 12 } 13 14 var valid = function() { 15 try { 16 return SpreadsheetApp.getActiveRange() 17 .getDataValidation() 18 .getCriteriaValues()[0] 19 .getValues(); 20 } catch(e) { 21 return null; 22 } 23 }; 24 25 function 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 }
Vad som händer här: onOpen lägger till alternativet "Multi-select for this cell…" i kalkylarkets anpassade meny. showDialog öppnar sidofältet med HTML-gränssnittet. Funktionen valid hämtar listan med tillåtna värden från den aktiva cellens datavalidering. Och fillCell samlar in de ikryssade kryssrutorna och skriver dem till cellen separerade med kommatecken.
Notera: i.substr(0, 2) filtrerar bara de parametrar vars namn börjar med ch, dessa är kryssruteidentifierare från HTML-formuläret. Andra parametrar ignoreras.
Klicka på Arkiv → Spara (eller Ctrl+S). Vid första sparandet kommer scriptet att begära behörigheter, det är normalt, utan dem kan det inte läsa celldata och visa sidofältet.
Steg 3: Lägg till HTML-gränssnittet
Nu skapar vi själva sidofältet. I samma redigerare: Arkiv → Ny → HTML-fil. Döp den till dialog.html och klistra in:
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>
Logiken är enkel: server-taggen <? var data = valid(); ?> anropar funktionen valid() från GS-filen och får en array med tillåtna värden. Om ett intervall anges renderas kryssrutor, en för varje värde. Knappen Select skickar formuläret till fillCell, knappen Refresh validation läser om datavalideringen (praktiskt när du växlar mellan celler).
Om den markerade cellen saknar datavalidering visar panelen ett meddelande med en länk till Googles hjälp.
Spara filen: Arkiv → Spara. Båda filerna (multi-select.gs och dialog.html) ska finnas i samma projekt.
Steg 4: Kör och använd
Gå tillbaka till kalkylarket och uppdatera sidan. Efter ett par sekunder visas ett nytt Scripts-menyalternativ i menyraden, detta är resultatet av onOpen.
Nu arbetsflödet:
- Markera valfri cell som har datavalidering via intervall konfigurerad.
- Gå till Scripts → Multi-select for this cell….
- Ett sidofält öppnas till höger med en lista med kryssrutor, alla värden från ditt valideringsintervall.
- Kryssa i önskade alternativ och klicka på Select.
- Cellen fylls med de valda värdena separerade med kommatecken:
urgent, budget, design.
Du behöver inte stänga sidofältet. Klicka bara på en annan cell (också med datavalidering) och klicka på Refresh validation, så uppdateras kryssrutelistan för den nya cellen.

I skärmbilden syns resultatet: en cell med datavalidering, ett sidofält med aktiva kryssrutor och Scripts-menyn i menyraden. Så här ser lösningen ut i praktiken.
Steg 5: Vad kan förbättras
Grundscriptet löser uppgiften "välj flera värden från en rullgardinslista", och för de flesta scenarier räcker detta. Men om du arbetar intensivt med kalkylarket finns det ett par förbättringar:
- Lägg till "Select All" / "Deselect All". Två knappar i HTML-formuläret som programmatiskt kryssar i eller av alla kryssrutor. Ett par rader i JavaScript, så sparar du ett dussin klick på ett stort intervall.
- Byt ut kommatecknet mot en annan avgränsare. I funktionen
fillCellsammanfogar radens.join(', ')värden med kommatecken. Om din data innehåller kommatecken som en del av värdet, byt till;eller|. - Automatisk uppdatering vid cellbyte. Istället för att manuellt klicka på "Refresh validation" kan du koppla en trigger till cellmarkeringshändelsen (
onSelectionChange), men detta kräver något mer komplex kod och manuell triggerinstallation.
Scriptets källkod är en anpassning av Alexander Ivanovs lösning, publicerad av Arthur Attwell på GitHub Gist. Där hittar du också communitydiskussioner och förbättringar.
Nedan finns en videohandledning på engelska, om du föredrar att titta istället för att läsa:
⁉️🤔 Vanliga frågor
Scriptet visas inte i menyn efter att jag sparat. Vad ska jag göra?
Uppdatera kalkylarksidan (F5 eller Ctrl+R). Om det inte hjälper, kontrollera att funktionen heter exakt
onOpen(skiftläge spelar roll), och att det inte finns några fel i scriptredigeraren: Visa → Loggar visar stackspåret. Ibland hjälper det att stänga scriptredigeraren och öppna den igen.
Sidofältet öppnas, men det finns inga kryssrutor, bara ett meddelande om datavalidering.
Detta betyder att den markerade cellen saknar datavalidering via intervall. Markera den cell du konfigurerade validering för i steg 1. Om validering är konfigurerad för ett cellintervall snarare än en cell, se till att den aktiva cellen är exakt den som ingår i intervallet.
Kan scriptet användas på flera blad i ett kalkylark?
Ja. Scriptet är kopplat till behållaren (kalkylarket), inte till ett specifikt blad. Datavalidering fungerar på bladnivå, konfigurera det på de blad som behövs, så hämtar sidofältet värden från den aktiva cellen oavsett blad.
Efter att jag valt värden visar cellen felet "Ogiltigt värde".
Du har aktiverat "Avvisa indata" i datavalideringsinställningarna. Gå tillbaka till Data → Datavalidering, välj "Visa varning" istället för "Avvisa indata". Om datan är kritisk, behåll varningen, den blockerar inte skrivning från scriptet.
Scriptet begär åtkomst till Google-kontot, är det säkert?
Ja. Behörigheter behövs för
SpreadsheetApp.getActiveRange()(läsa celldata) ochSpreadsheetApp.getUi()(visa meny och sidofält). Scriptet fungerar bara inuti ditt kalkylark och har ingen åtkomst till andra filer på Drive. Den fullständiga listan över behörigheter visas i auktoriseringsfönstret.
Vilket flervals-script du ska installera i ditt kalkylark
Den beskrivna lösningen är ett minimalt fungerande ramverk. Två filer, inget externt bibliotek, tydlig logik. För utgiftsuppföljning, uppgiftstaggning och alla scenarier där du behöver skriva flera värden från en referenslista i en cell är det mer än tillräckligt.
Om du arbetar mycket med Google Sheets, kolla in Apps Script-dokumentationen. Möjligheterna sträcker sig långt bortom kryssrutor: automatisk e-post när en cell ändras, generera dokument från mallar, integration med Google Calendar. Börja med detta script, och vem vet, du kanske skriver dina egna automatiseringar.



