Kalkylark på jobbet
Vad är GAS (Google Apps Script)?
Automatisera Google Kalkylark – en introduktion
Göra om en tabell till samma form varje vecka. Ta bort tomma rader ur inklistrade data. Markera rader som uppfyller ett villkor. Kalkylark är fulla av uppgifter med fasta steg.
Det är GAS (Google Apps Script) som utför sådana uppgifter automatiskt. Den här artikeln visar vad GAS kan göra, var du börjar och hur du tar dig igenom ”auktoriserings”-skärmarna som många fastnar på första gången.
Vad är GAS?
GAS är Googles sätt att köra program. Det använder samma syntax som JavaScript och styr Google Kalkylark men också Gmail, Google Kalender, Google Drive och Google Formulär.
Du behöver bara ett Google-konto. Det är gratis och inget behöver installeras: öppna ett kalkylark i webbläsaren och börja skriva. Programmet körs på Googles servrar, inte på din dator.
Inspelade makron och GAS
Google Kalkylark har ”makron” som spelar in det du gör så att du kan upprepa det hur många gånger som helst. Starta inspelningen med ”Tillägg” → ”Makron” → ”Spela in makro”, markera och skriv i celler, så sparas dina steg som GAS-kod.
/** @OnlyCurrentDoc */
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('B2').activate();
spreadsheet.getCurrentCell().setValue('test');
spreadsheet.getActiveRangeList().setFontWeight('bold');
};Ett makro är alltså GAS. Även om du ger makrot ett namn som ”Fetstilstest” heter funktionen i koden myFunction. Namnet i menyn och funktionsnamnet sparas separat.
När du spelar in väljer du i fältet längst ned ”Använd absoluta referenser” eller ”Använd relativa referenser”. Absoluta referenser sparas som celladresser som B2, så makrot skriver alltid på samma ställe oavsett vilken cell som är markerad. Relativa referenser sparas som ”en rad under den aktuella cellen” och utgår från den markerade cellen.
Inspelning räcker inte för tabeller vars längd ändras eller steg som beror på villkor. Därifrån läser du den inspelade koden och bygger vidare på den.
Det här kan du göra med GAS
- Ta bort tomma rader ur inklistrade data och formatera rubrikerna
- Titta på belopp eller datum och skriva ”Stor” eller ”Försenad” i en kolumn
- Lägga till en egen meny i kalkylarket och köra uppgifter som med en knapp
- Skapa egna funktioner att använda i celler (anpassade funktioner)
- Skicka e-post med Gmail utifrån en tabell
- Köra en uppgift vid en fast tid, till exempel varje morgon kl. 8 (utlösare)
- Kopiera svar från Google Formulär till ett annat blad när de kommer in
För hand tar var och en av dessa uppgifter allt från några minuter till tiotals minuter. Skriv koden en gång, så räcker det sedan med ett klick i en meny – eller så körs den helt av sig själv.
Så kommer du i gång med GAS
- Öppna kalkylarket och välj ”Tillägg” → ”Apps Script”
- Redigeraren öppnas i en ny flik: ”Kod.gs” till vänster och
function myFunction() { }till höger - Skriv koden inom
{ }och spara (Ctrl+S, på Mac ⌘+S) - Klicka på ”▷ Kör” högst upp. Resultatet visas längst ned i ”Körningslogg”
function myFunction() {
const sheet = SpreadsheetApp.getActiveSheet();
const value = sheet.getRange('A1').getValue();
Logger.log(value);
sheet.getRange('B1').setValue('Kontrollerad');
}Logger.log skriver ett värde i körningsloggen. Tal visas med decimalpunkt, till exempel 120.0 (console.log visar 120). Om något inte fungerar som väntat kontrollerar du först värdena i loggen.
Auktoriseringsskärmarna vid första körningen
Första gången du kör din kod frågar en skärm om skriptet får läsa och redigera ditt kalkylark. Många fastnar här, så vi går igenom det steg för steg.
- ”Auktorisering krävs” → Granska behörigheter / OK
- Välj ett konto
- ”Google har inte verifierat den här appen” → ”Avancerat” längst ned till vänster
- ”Öppna (projektnamn) (osäkert)”
- Kontrollera vad du tillåter och klicka på ”Tillåt” (om det finns punkter att välja, välj dem och klicka på ”Fortsätt”)
”Google har inte verifierat den här appen” är en varning för skript som Google inte har granskat. Skript du skrivit och makron du spelat in är inte granskade, så den här skärmen visas alltid. Har du gjort det själv kan du fortsätta utan problem.
Visas skärmen däremot i ett kalkylark du fått av någon du inte känner, väljer du ”Tillbaka till säkerheten”. När du har tillåtit det kan skriptet hantera dina kalkylark och din e-post med ditt konto.
Skriver du /** @OnlyCurrentDoc */ först i koden får skriptet bara röra ”det här kalkylarket” och behörigheterna som begärs blir snävare. Inspelade makron har det från början.
Du kan gå igenom samma steg i uppdrag 1 i övningen.
Vanlig kod
Här är det du använder oftast när du arbetar med ett kalkylark. Rad- och kolumnnummer börjar på 1, medan index i en array som lästs med getValues börjar på 0.
| Kod | Betydelse |
|---|---|
| const sheet = SpreadsheetApp.getActiveSheet(); | Bladet som är öppet nu |
| sheet.getRange('A1').getValue() | Läs värdet i A1 |
| sheet.getRange('A1').setValue('Avslutad') | Skriv i A1 |
| sheet.getRange(2, 3) | Rad 2, kolumn 3 (C2). Kolumner kan anges som tal |
| sheet.getRange('A2:C10').getValues() | Läs ett område på en gång (tvådimensionell array) |
| sheet.getRange(2, 1, 9, 3).setValues(values) | Skriv på en gång (rader och kolumner som i arrayen) |
| sheet.getLastRow() | Numret på den sista raden med ett värde |
| sheet.appendRow(['10/31', 'Sato', 5000]) | Lägg till en rad under den sista |
| sheet.deleteRow(5) | Ta bort rad 5 (raderna under flyttas upp) |
| sheet.getRange('A1:D1').setFontWeight('bold') | Gör fetstilt |
| sheet.getRange('A1:D1').setBackground('#fff2cc') | Ange bakgrundsfärg |
| Logger.log(value) | Skriv i körningsloggen (för att kontrollera värden) |
function judgeTargets() {
const sheet = SpreadsheetApp.getActiveSheet();
for (let row = 2; row <= sheet.getLastRow(); row++) {
const sales = sheet.getRange(row, 2).getValue();
const target = sheet.getRange(row, 3).getValue();
if (sales >= target) {
sheet.getRange(row, 4).setValue('Uppnått');
} else {
sheet.getRange(row, 4).setValue('Ej uppnått');
}
}
}function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Månadsbokslut')
.addItem('Markera stora affärer', 'markLarge')
.addToUi();
}En funktion som heter onOpen körs automatiskt när kalkylarket öppnas. Kör du den med ”▷ Kör” i redigeraren får du felet Cannot call SpreadsheetApp.getUi() from this context., så spara och öppna kalkylarket igen för att kontrollera.
Skicka e-post och köra på schema med utlösare
Det man oftast söker efter om GAS är e-post och utlösare.
function sendReminders() {
const sheet = SpreadsheetApp.getActiveSheet();
const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
rows.forEach(([name, email]) => {
MailApp.sendEmail(email, 'Påminnelse om sista dag', name + ',\n\nsista dag för inlämning är på fredag.');
});
}Det finns en gräns: ett gratis Google-konto kan skicka upp till 100 e-postmeddelanden per dag (Google Workspace-konton fler). En körning får pågå i högst 6 minuter; därefter stoppas den med ”Exceeded maximum execution time”.
För att köra på schema klickar du till vänster i redigeraren på ”Utlösare” (klockikonen) → ”Lägg till utlösare” och väljer funktionen och ”Tidsstyrd”. Du kan ange en tid varje dag, vecka eller månad.
E-post skickas på riktigt även när du bara provar. Testa först med en tabell som bara innehåller din egen adress.
Skillnader mot VBA i Excel
| GAS | VBA i Excel | |
|---|---|---|
| Kod | JavaScript | VBA(Visual Basic) |
| Var det körs | Googles servrar | Excel på din egen dator |
| Vad du behöver | En webbläsare och ett Google-konto | Skrivbordsversionen av Excel (främst i Windows) |
| Kopplas till | Gmail, Kalender, Drive, Formulär | Word, Outlook, filer på datorn |
| Köra på schema | Med utlösare (körs även när datorn är avstängd) | I kombination med Schemaläggaren i Windows eller liknande |
Idéerna är desamma i båda: läsa celler, skriva, upprepa och skilja på fall med villkor. Kan du det ena kan du läsa det andra. Excel-makron beskrivs i vår introduktion till makron i Excel.
Öva i webbläsaren
I webbplatsens simulering av makron och GAS övar du genom att köra riktig kod i ett virtuellt kalkylark och en Apps Script-redigerare. Du fyller i luckor i koden, och på mobilen väljer du varje lucka bland fyra alternativ.
- Kapitel 1 Spela in och köra makron
Kör ett inspelat makro och spela in ett eget. Absoluta och relativa referenser, att läsa och ändra inspelad kod.
- Kapitel 2 Läsa, upprepa, skilja på fall
Läs celler med getValue, skriv med setValue och kontrollera värden i körningsloggen. Gå igenom alla rader med for och skilj på fall med if.
- Kapitel 3 Fallstudie: städa upp månadens försäljningstabell
Ta bort tomma rader, markera stora affärer på en gång och kör det från en egen meny. Till sist en egen funktion för celler.
Så lär du dig GAS
En bra start är att ”Spela in makro” i ett av dina egna kalkylark och läsa koden som blir resultatet. Då ser du lättare vad varje kommando gör.
Generativ AI kan också skriva kod. Men för att avgöra om den stämmer och var den ska ändras behöver du kunna läsa åtminstone ”vanlig kod” i den här artikeln.
* Skärmnamn och gränser gäller oktober 2026 och kan ändras när Google gör uppdateringar.
* Google Kalkylark är ett varumärke som tillhör Google LLC. Den här webbplatsen har ingen koppling till Google.