VBA & Automation

Home/VBA & Automation

Guider och tutorials för Excel VBA-programmering och automation

10 vanligaste Excel-uppgifterna du kan automatisera idag

10 vanligaste Excel-uppgifterna du kan automatisera idag

Varje vecka pratar jag med ekonomichefer, controllrar och projektledare som spenderar timmar på samma Excel-uppgifter om och om igen. Dataimport varje måndag. Rapportformatering varje fredag. Mailutskick den första i varje månad.

De vet att det finns ett bättre sätt, men vet inte var de ska börja.

Efter tio år som excelkonsult har jag sett exakt vilka uppgifter som både är vanligast OCH lättast att automatisera. Det här är de 10 som ger snabbast resultat – komplett med kodexempel du kan börja använda direkt.

1. Formatera rapporter konsekvent

Tidsbesparing: 10-15 minuter per rapport

Du får rådata från systemet. Varje gång måste du göra om det till presentationsformat: rubrikrad fet och färgad, kolumner anpassade, sifferkolumner med tusentalsavgränsare, totalsumma längst ner.

Med 5 rapporter per vecka är det en timme varje vecka – 52 timmar per år.

VBA-lösning

Sub FormateraRapport()
    Dim ws As Worksheet
    Dim sistaRad As Long

    Set ws = ActiveSheet
    sistaRad = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Formatera rubrikrad
    With ws.Range("A1:E1")
        .Font.Bold = True
        .Font.Size = 12
        .Interior.Color = RGB(68, 114, 196)
        .Font.Color = RGB(255, 255, 255)
        .HorizontalAlignment = xlCenter
    End With

    ' Lägg till ramar
    ws.Range("A1:E" & sistaRad).Borders.LineStyle = xlContinuous

    ' Formatera sifferkolumner (kolumn D och E)
    ws.Range("D2:E" & sistaRad).NumberFormat = "#,##0"

    ' Lägg till totalsumma
    ws.Cells(sistaRad + 2, 1).Value = "TOTALT"
    ws.Cells(sistaRad + 2, 1).Font.Bold = True
    ws.Cells(sistaRad + 2, 4).Formula = "=SUM(D2:D" & sistaRad & ")"
    ws.Cells(sistaRad + 2, 5).Formula = "=SUM(E2:E" & sistaRad & ")"

    ' Anpassa kolumnbredder
    ws.Columns("A:E").AutoFit

    MsgBox "Rapport formaterad!", vbInformation
End Sub

Vad händer här: – Hittar automatiskt sista raden med data (fungerar för vilken storlek som helst) – Formaterar rubrikraden med blå bakgrund och vit text – Lägger till ramar runt all data – Formaterar siffror med tusentalsavgränsare – Lägger till summering automatiskt – Anpassar kolumnbredder så allt syns

Hur du använder det: Klistra in koden i en modul, lägg till en knapp i din rapportmall. Varje gång du får ny data: klistra in, klicka på knappen, klart.

2. Importera data från flera filer

Tidsbesparing: 30-60 minuter per dataimport

Du har 15 Excel-filer från olika avdelningar. All data ska sammanställas i en huvudfil. Varje månad öppnar du varje fil, kopierar rätt område, klistrar in i huvudfilen.

Med månatlig sammanställning är det 12 timmar per år. Med veckovis sammanställning: 48 timmar.

VBA-lösning

Sub ImporteraFlerFiler()
    Dim mappSökväg As String
    Dim filNamn As String
    Dim wbKälla As Workbook
    Dim wsKälla As Worksheet
    Dim wsMål As Worksheet
    Dim målRad As Long

    ' Din mapp med källfiler
    mappSökväg = "C:\Data\Månadsrapporter\"

    Set wsMål = ThisWorkbook.Worksheets("Sammanställning")
    målRad = 2  ' Börja från rad 2 (rad 1 är rubriker)

    ' Rensa gammal data
    wsMål.Range("A2:E10000").ClearContents

    ' Loopa genom alla Excel-filer i mappen
    filNamn = Dir(mappSökväg & "*.xlsx")

    Do While filNamn <> ""
        ' Öppna källfil (utan att visa den)
        Set wbKälla = Workbooks.Open(mappSökväg & filNamn, ReadOnly:=True)
        Set wsKälla = wbKälla.Worksheets(1)

        ' Hitta sista raden i källfilen
        Dim källSistaRad As Long
        källSistaRad = wsKälla.Cells(wsKälla.Rows.Count, "A").End(xlUp).Row

        ' Kopiera data (från rad 2 för att hoppa över rubriker)
        If källSistaRad > 1 Then
            wsKälla.Range("A2:E" & källSistaRad).Copy
            wsMål.Cells(målRad, 1).PasteSpecial xlPasteValues
            målRad = målRad + (källSistaRad - 1)
        End If

        ' Stäng källfil utan att spara
        wbKälla.Close SaveChanges:=False

        ' Nästa fil
        filNamn = Dir
    Loop

    Application.CutCopyMode = False
    MsgBox "Importerade data från " & (målRad - 2) & " rader", vbInformation
End Sub

Användning: Ändra mappSökväg till din faktiska mapp. Lägg alla källfiler där. Kör makrot. All data sammanställs automatiskt.

Tips: Spara detta makro i din sammanställningsmall så har du det redo varje månad.

3. Skicka e-post från Excel

Tidsbesparing: 20-30 minuter per utskick

Du har en kundlista. Varje kund ska få ett personligt mail med deras specifika information (saldo, orderhistorik, påminnelse).

Manuellt: kopiera data, klistra in i Outlook, skicka. Upprepa 50 gånger.

VBA-lösning

Sub SkickaPersonligaMail()
    Dim OutlookApp As Object
    Dim Mail As Object
    Dim ws As Worksheet
    Dim sistaRad As Long
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Kunder")
    sistaRad = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Set OutlookApp = CreateObject("Outlook.Application")

    ' Loopa genom varje kund
    For i = 2 To sistaRad
        Set Mail = OutlookApp.CreateItem(0)

        With Mail
            .To = ws.Cells(i, 3).Value  ' Email i kolumn C
            .Subject = "Månatlig sammanställning - " & ws.Cells(i, 1).Value
            .Body = "Hej " & ws.Cells(i, 2).Value & "," & vbCrLf & vbCrLf & _
                    "Ditt saldo per " & Date & " är: " & ws.Cells(i, 4).Value & " kr" & vbCrLf & vbCrLf & _
                    "Antal ordrar denna månad: " & ws.Cells(i, 5).Value & vbCrLf & vbCrLf & _
                    "Mvh," & vbCrLf & "Excel Department"

            ' .Send  ' Skickar direkt - använd för automation
            .Display  ' Visar mailet först - bra för testning
        End With

        Set Mail = Nothing
    Next i

    Set OutlookApp = Nothing
    MsgBox "Skapade " & (sistaRad - 1) & " mail", vbInformation
End Sub

VIKTIGT: Använd .Display först för att se att mailen ser rätt ut. När du är säker, byt till .Send för automatisk utskick.

Kolumnstruktur i exemplet: – A: Kund-ID – B: Kundnamn – C: Email – D: Saldo – E: Antal ordrar

Anpassa till din data.

4. Ta bort tomma rader

Tidsbesparing: 5-10 minuter per fil

Du importerar data från ett system. Den innehåller massa tomma rader. Att klicka genom och radera manuellt tar tid och är lätt att missa några.

VBA-lösning

Sub TaBortTommaRader()
    Dim ws As Worksheet
    Dim sistaRad As Long
    Dim i As Long
    Dim antalBorttagna As Long

    Set ws = ActiveSheet
    sistaRad = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    antalBorttagna = 0

    ' Loopa bakifrån (viktigt när man raderar)
    For i = sistaRad To 2 Step -1
        ' Om hela raden är tom
        If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then
            ws.Rows(i).Delete
            antalBorttagna = antalBorttagna + 1
        End If
    Next i

    MsgBox "Tog bort " & antalBorttagna & " tomma rader", vbInformation
End Sub

Varför loopa bakifrån? Om du raderar rad 5 blir den gamla rad 6 nu rad 5. Genom att börja längst ner undviker du att hoppa över rader.

5. Kopiera filter till nytt blad

Tidsbesparing: 10-15 minuter per filtrering

Du behöver ofta kopiera alla rader som matchar ett kriterium till ett nytt blad. “Alla kunder från Stockholm”, “Alla ordrar över 10 000 kr”, osv.

VBA-lösning

Sub KopieraFiltrerad()
    Dim wsKälla As Worksheet
    Dim wsMål As Worksheet
    Dim sistaRad As Long
    Dim filterVärde As String

    Set wsKälla = ThisWorkbook.Worksheets("AllData")

    ' Skapa nytt blad för resultatet
    Set wsMål = ThisWorkbook.Worksheets.Add
    wsMål.Name = "Filtrerad_" & Format(Now, "yyyymmdd_hhmmss")

    sistaRad = wsKälla.Cells(wsKälla.Rows.Count, "A").End(xlUp).Row

    ' Fråga efter filtervärde
    filterVärde = InputBox("Vilket värde vill du filtrera på? (t.ex. Stockholm)")

    If filterVärde = "" Then Exit Sub

    ' Kopiera rubriker
    wsKälla.Rows(1).Copy wsMål.Rows(1)

    ' Tillämpa autofilter
    wsKälla.Range("A1:E" & sistaRad).AutoFilter Field:=2, Criteria1:=filterVärde

    ' Kopiera synliga celler
    wsKälla.Range("A2:E" & sistaRad).SpecialCells(xlCellTypeVisible).Copy
    wsMål.Range("A2").PasteSpecial xlPasteValues

    ' Ta bort filter
    wsKälla.AutoFilterMode = False

    Application.CutCopyMode = False
    MsgBox "Kopierade filtrerad data till nytt blad", vbInformation
End Sub

Användning: Kör makrot, ange filtervärde (t.ex. “Stockholm”), klart. Alla matchande rader kopieras till ett nytt blad.

6. Sammanfatta data med pivot-tabell

Tidsbesparing: 15-20 minuter per sammanställning

Pivot-tabeller är kraftfulla men tar tid att sätta upp. Om du gör samma typ av pivot varje vecka kan du automatisera det.

VBA-lösning

Sub SkapaPivot()
    Dim wsKälla As Worksheet
    Dim wsPivot As Worksheet
    Dim pivotCache As PivotCache
    Dim pivotTabell As PivotTable
    Dim dataOmråde As Range
    Dim sistaRad As Long

    Set wsKälla = ThisWorkbook.Worksheets("Försäljning")
    sistaRad = wsKälla.Cells(wsKälla.Rows.Count, "A").End(xlUp).Row
    Set dataOmråde = wsKälla.Range("A1:E" & sistaRad)

    ' Skapa nytt blad för pivot
    On Error Resume Next
    Set wsPivot = ThisWorkbook.Worksheets("Pivot")
    If wsPivot Is Nothing Then
        Set wsPivot = ThisWorkbook.Worksheets.Add
        wsPivot.Name = "Pivot"
    Else
        wsPivot.Cells.Clear
    End If
    On Error GoTo 0

    ' Skapa pivot cache och tabell
    Set pivotCache = ThisWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=dataOmråde)

    Set pivotTabell = pivotCache.CreatePivotTable( _
        TableDestination:=wsPivot.Range("A1"), _
        TableName:="FörsäljningsPivot")

    ' Konfigurera pivot-tabellen
    With pivotTabell
        ' Lägg till fält
        .PivotFields("Produkt").Orientation = xlRowField
        .PivotFields("Månad").Orientation = xlColumnField

        With .PivotFields("Försäljning")
            .Orientation = xlDataField
            .Function = xlSum
            .NumberFormat = "#,##0"
        End With
    End With

    MsgBox "Pivot-tabell skapad!", vbInformation
End Sub

Anpassa: Ändra fältnamnen (“Produkt”, “Månad”, “Försäljning”) till dina faktiska kolumnnamn.

7. Spara varje blad som separat fil

Tidsbesparing: 10-15 minuter när du delar ut filer

Du har en arbetsbok med ett blad per avdelning. Varje avdelning ska få sin fil. Manuellt: kopiera blad, klistra in i ny arbetsbok, spara, upprepa 10 gånger.

VBA-lösning

Sub SparaVarjeBladSomFil()
    Dim ws As Worksheet
    Dim nyWb As Workbook
    Dim sparaMapp As String

    ' Mapp där filerna ska sparas
    sparaMapp = ThisWorkbook.Path & "\Exporterade blad\"

    ' Skapa mapp om den inte finns
    If Dir(sparaMapp, vbDirectory) = "" Then
        MkDir sparaMapp
    End If

    ' Loopa genom alla synliga blad
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible Then
            ' Kopiera bladet till ny arbetsbok
            ws.Copy
            Set nyWb = ActiveWorkbook

            ' Spara med bladnamn som filnamn
            nyWb.SaveAs Filename:=sparaMapp & ws.Name & ".xlsx"
            nyWb.Close SaveChanges:=False
        End If
    Next ws

    MsgBox "Alla blad sparade som separata filer i:" & vbCrLf & sparaMapp, vbInformation
End Sub

Resultat: En undermapp skapas med alla dina blad som separata filer, redo att skickas till respektive avdelning.

8. Konvertera text till datum

Tidsbesparing: 10-20 minuter per konvertering

Du importerar data där datum är text (“20260130” eller “30.01.2026”) och Excel förstår inte att det är datum. Manuell konvertering av 1000 rader är tidskrävande.

VBA-lösning

Sub KonverteraTillDatum()
    Dim ws As Worksheet
    Dim sistaRad As Long
    Dim i As Long
    Dim textDatum As String
    Dim riktigtDatum As Date

    Set ws = ActiveSheet
    sistaRad = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    ' Kolumn A innehåller text-datum som "20260130"
    For i = 2 To sistaRad
        textDatum = ws.Cells(i, 1).Value

        ' Om formatet är YYYYMMDD
        If Len(textDatum) = 8 And IsNumeric(textDatum) Then
            riktigtDatum = DateSerial(Left(textDatum, 4), _
                                      Mid(textDatum, 5, 2), _
                                      Right(textDatum, 2))
            ws.Cells(i, 2).Value = riktigtDatum
            ws.Cells(i, 2).NumberFormat = "yyyy-mm-dd"
        End If
    Next i

    MsgBox "Konvertering klar! Kolla kolumn B", vbInformation
End Sub

Anpassning för olika format: – “DD.MM.YYYY”: Dela på punkter och använd DateSerial – “YYYY-MM-DD”: Excel förstår ofta detta direkt, men CDate() kan användas

9. Hitta och markera dubbletter

Tidsbesparing: 15-30 minuter per granskning

Du har en kundlista eller produktdatabas. Du behöver hitta dubbletter (samma email, samma produktkod) och markera dem för granskning.

VBA-lösning

Sub MarkeraDubbletter()
    Dim ws As Worksheet
    Dim sistaRad As Long
    Dim i As Long, j As Long
    Dim värde1 As Variant, värde2 As Variant
    Dim antalDubbletter As Long

    Set ws = ActiveSheet
    sistaRad = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    antalDubbletter = 0

    ' Rensa tidigare markeringar
    ws.Range("A2:A" & sistaRad).Interior.ColorIndex = xlNone

    ' Jämför varje cell med alla under den
    For i = 2 To sistaRad - 1
        värde1 = ws.Cells(i, 1).Value

        For j = i + 1 To sistaRad
            värde2 = ws.Cells(j, 1).Value

            ' Om matchning, markera båda
            If värde1 = värde2 And värde1 <> "" Then
                ws.Cells(i, 1).Interior.Color = RGB(255, 200, 200)
                ws.Cells(j, 1).Interior.Color = RGB(255, 200, 200)
                antalDubbletter = antalDubbletter + 1
            End If
        Next j
    Next i

    MsgBox "Hittade " & antalDubbletter & " dubbletter (markerade i rött)", vbInformation
End Sub

OBS: Detta makro kan vara långsamt på mycket stora dataset (>10 000 rader). För stora datamängder, använd Dictionary-objekt för snabbare prestanda.

10. Backup av arbetsbok automatiskt

Tidsbesparing: Förhindrar datförlust

Inte direkt en tidsbesparing, men hur ofta har du önskat att du hade en backup från igår? Detta makro skapar automatiskt en datumstempad kopia när du sparar.

VBA-lösning

Denna kod läggs i ThisWorkbook (inte en modul):

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim backupMapp As String
    Dim backupNamn As String

    backupMapp = ThisWorkbook.Path & "\Backups\"

    ' Skapa backup-mapp om den inte finns
    If Dir(backupMapp, vbDirectory) = "" Then
        MkDir backupMapp
    End If

    ' Skapa filnamn med datum och tid
    backupNamn = backupMapp & _
                 Replace(ThisWorkbook.Name, ".xlsm", "") & _
                 "_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsm"

    ' Spara backup
    ThisWorkbook.SaveCopyAs backupNamn
End Sub

Hur det fungerar: Varje gång du sparar skapas automatiskt en kopia i en “Backups”-mapp med datum och tid i filnamnet.

Tips: Städa ut gamla backups regelbundet för att spara diskutrymme.

Kom igång med automation idag

Du har nu 10 konkreta exempel på uppgifter du kan automatisera. Varje exempel sparar tid, minskar fel och gör ditt arbete mer konsekvent.

Nästa steg

1. Välj en uppgift Vilken av de 10 uppgifterna gör du oftast? Börja där.

2. Testa koden Kopiera relevant kod till en modul i Excel. Testa på exempeldata först.

3. Anpassa till din situation Ändra kolumnnamn, sökvägar och format så det passar din data.

4. Lär dig mer Om du vill förstå hur koden fungerar i detalj, läs vår VBA för nybörjare-guide eller vår kompletta guide till Excel-automation.

5. Få professionell hjälp Om du behöver mer avancerad automation eller vill att någon bygger lösningen åt dig, kontakta oss. Vi hjälper företag automatisera allt från enkla makron till komplexa rapporteringssystem.

Ta en VBA-kurs

Om du seriöst vill lära dig VBA och kunna bygga egna lösningar rekommenderar vi vår VBA-kurs för företag. På en dag lär du dig fundamenten och får verktyg för att automatisera dina specifika arbetsflöden.

Vanliga frågor

Kan jag kombinera flera av dessa makron? Absolut. Du kan ha många makron i samma arbetsbok och köra dem efter varandra eller kombinera funktionalitet.

Fungerar detta på Mac? De flesta exemplen fungerar på Mac, men email-funktionen kan kräva justingar. Windows och Mac-versioner av VBA är lite olika.

Måste jag kunna programmering? Nej. Du kan kopiera koden och justera de delar som behövs (sökvägar, kolumnnamn, etc.). Men för att verkligen förstå och bygga egna lösningar rekommenderar vi grundläggande VBA-kunskap.

Är det säkert att köra kod jag hittat online? Kod från betrodda källor (som denna) är säker – den gör bara det den säger. Läs alltid igenom koden innan du kör den. Undvik kod från okända forum eller sidor.

Vad händer om något går fel? Tryck Ctrl + Z direkt efter att ha kört makrot för att ångra. Testa alltid på en kopia först. Professionella lösningar har felhantering inbyggt.

Börja spara tid idag

Varje vecka du väntar är en vecka av manuellt arbete du kunde ha automatiserat. Ta ett av dessa exempel, testa det, se hur mycket tid du sparar. Sen går du vidare till nästa.

Automation är inte svårt. Det är bara okänt. Nu är det inte okänt längre.

Behöver du hjälp att komma igång?

Boka ett gratis 15-minuters samtal så diskuterar vi vilka av dina uppgifter som är värt att automatisera först.


Skriven av Lukas Lilja, Excel Department. Vi har hjälpt hundratals företag automatisera sina Excel-processer och spara tusentals timmar årligen.

VBA för nybörjare: Din första makro på 15 minuter

VBA för nybörjare: Din första makro på 15 minuter

Du har hört att VBA kan automatisera dina Excel-uppgifter och spara timmar varje vecka. Men där du står nu ser det ut som en oöverstiglig mur av kod och programmering. Jag lovar dig: om 15 minuter har du skapat och kört ditt första fungerande makro.

Jag har undervisat hundratals personer i VBA genom åren. De flesta är ekonomer, controllers och projektledare – inte programmerare. Alla har samma utgångspunkt: “Jag har aldrig programmerat något.” Och alla lyckas skapa sitt första makro under första lektionen.

Den här guiden tar dig igenom exakt samma process. Inga förkunskaper behövs. Bara Excel och 15 minuter av din tid.

Vad du kommer skapa

Under denna tutorial bygger vi ett enkelt men användbart makro som: 1. Formaterar rubrikrader automatiskt (fet stil, färgad bakgrund) 2. Anpassar kolumnbredder så all text syns 3. Lägger till dagens datum i en cell

Det låter kanske enkelt, men det här makrot innehåller fundamenten för allt VBA-arbete. Samma principer gäller oavsett om du bygger ett litet formaterings-makro eller ett komplext rapporteringssystem.

Förberedelser – Aktivera Developer-fliken

Innan vi kan börja koda behöver vi se VBA-verktygen i Excel.

Steg 1: Öppna Excel och ett tomt kalkylblad

Steg 2: Klicka på File (Arkiv) i menyn

Steg 3: Välj Options (Alternativ) längst ner i menyn

Steg 4: I dialogrutan som öppnas, klicka på Customize Ribbon (Anpassa menyfliksområdet)

Steg 5: I höger kolumn hittar du en lista över flikar. Bocka i rutan bredvid “Developer” (Utvecklare)

Steg 6: Klicka OK

Nu ser du en ny flik i Excel-menyn som heter Developer. Här finns alla verktyg för makron och VBA.

Din första kod – Hello World

Varje programmerare börjar med “Hello World” – ett enkelt program som bara visar ett meddelande. Vi gör samma sak.

Öppna VBA-editorn

Det finns två sätt att öppna VBA-editorn:

Alternativ 1: Tryck Alt + F11 (detta är kortkommandot som alla VBA-utvecklare använder)

Alternativ 2: Gå till Developer-fliken och klicka på “Visual Basic”

VBA-editorn öppnas i ett nytt fönster. Låt dig inte skrämmas av alla paneler – fokusera på mitten där koden ska skrivas.

Skapa en modul

Kod skrivs i moduler. Tänk på dem som behållare för dina makron.

Steg 1: I VBA-editorn, klicka på Insert i menyn

Steg 2: Välj Module

Ett nytt tomt fönster öppnas med rubriken “Module1” högst upp. Det här är din kodyta.

Skriv ditt första makro

Skriv in följande kod exakt som den står här:

Sub MittFörstaMakro()
    MsgBox "Grattis! Du har skapat ditt första VBA-makro."
End Sub

Vad betyder koden?

  • Sub MittFörstaMakro() – Startar en subrutin (ett makro) med namnet “MittFörstaMakro”
  • MsgBox – Kommandot för att visa en meddelanderuta
  • Texten inom citattecken är meddelandet som visas
  • End Sub – Avslutar makrot

Kör ditt makro

Nu ska vi se det i action.

Alternativ 1: Tryck F5 (kör)

Alternativ 2: Klicka på den gröna play-knappen i verktygsfältet

Alternativ 3: Klicka på Run > Run Sub/UserForm i menyn

En meddelanderuta dyker upp med texten “Grattis! Du har skapat ditt första VBA-makro.”

Klicka OK för att stänga den.

Du har precis skrivit och kört VBA-kod. Känns det bra? Det borde det. Samma fundamentala process gäller för alla makron, oavsett hur komplexa de blir.

Gör något användbart – Formatera celler

Nu bygger vi något som faktiskt hjälper dig i ditt dagliga Excel-arbete.

Förbered ditt kalkylblad

Innan vi skriver koden behöver vi testdata.

Steg 1: Stäng VBA-editorn (tryck Alt + Q eller klicka på krysset)

Steg 2: I Excel, skriv följande i ditt kalkylblad:

  • Cell A1: Produktnamn
  • Cell B1: Försäljning
  • Cell C1: Kostnad
  • Cell D1: Vinst

Steg 3: Lägg till lite exempeldata under rubrikerna:

  • Rad 2: Produkt A, 10000, 6000, 4000
  • Rad 3: Produkt B, 15000, 9000, 6000

Nu har vi något att jobba med.

Skriv formateringsmakrot

Öppna VBA-editorn igen (Alt + F11).

Under ditt första makro (lämna lite mellanrum) skriver du detta nya makro:

Sub FormateraRubrik()
    ' Formatera rubrikraden (rad 1)
    Range("A1:D1").Font.Bold = True
    Range("A1:D1").Interior.Color = RGB(68, 114, 196)
    Range("A1:D1").Font.Color = RGB(255, 255, 255)
    Range("A1:D1").HorizontalAlignment = xlCenter

    ' Anpassa kolumnbredder
    Columns("A:D").AutoFit

    ' Lägg till dagens datum
    Range("F1").Value = "Genererad: " & Date

    MsgBox "Formatering klar!"
End Sub

Vad gör koden?

Låt oss bryta ner varje del:

Range("A1:D1").Font.Bold = True

Detta tar cellområdet A1 till D1 och gör texten fet.

Range("A1:D1").Interior.Color = RGB(68, 114, 196)

Ändrar bakgrundsfärgen till blå. RGB står för Red-Green-Blue och siffrorna anger färgmixen.

Range("A1:D1").Font.Color = RGB(255, 255, 255)

Gör texten vit (255,255,255 är vitt i RGB).

Range("A1:D1").HorizontalAlignment = xlCenter

Centrerar texten i cellerna.

Columns("A:D").AutoFit

Anpassar bredden på kolumnerna så all text får plats.

Range("F1").Value = "Genererad: " & Date

Skriver texten “Genererad:” följt av dagens datum i cell F1. & kombinerar text, och Date är en VBA-funktion som ger dagens datum.

Observera kommentaren: Raden som börjar med ' (apostrof) är en kommentar. Den körs inte som kod utan är där för att förklara vad koden gör. Använd kommentarer liberalt – ditt framtida jag kommer tacka dig.

Kör det nya makrot

Steg 1: Klicka någonstans i makrot “FormateraRubrik”

Steg 2: Tryck F5

Steg 3: Växla till Excel (Alt + F11 eller klicka på Excel-fönstret)

Titta på ditt kalkylblad. Rubrikraden är nu formaterad med blå bakgrund, vit fet text, centrerad. Kolumnerna har anpassats. Cell F1 visar dagens datum.

Det här är automation. Du kan nu köra detta makro på vilken rapport som helst för att få konsekvent formatering på sekunder.

Förstå VBA-grunderna

Nu när du har skapat två fungerande makron ska vi förstå principerna bakom koden.

Objekt, egenskaper och metoder

VBA bygger på objektmodellen. Excel består av objekt (saker) som har egenskaper (beskrivningar) och metoder (handlingar).

Objekt: – Application (Excel själv) – Workbook (en Excel-fil) – Worksheet (ett kalkylblad) – Range (celler)

Egenskaper: Beskriver objektet – Font.Bold (är texten fet?) – Interior.Color (bakgrundsfärg) – Value (värdet i en cell)

Metoder: Handlingar du gör med objektet – AutoFit (anpassa storlek) – Copy (kopiera) – Delete (radera)

Strukturen är alltid: Objekt.Egenskap = Värde eller Objekt.Metod

Variabler – Lagra information

Variabler är som lådor där du sparar information för att använda senare.

Sub AnvändVariabler()
    Dim namn As String
    Dim ålder As Integer

    namn = "Lukas"
    ålder = 35

    MsgBox namn & " är " & ålder & " år"
End Sub

Dim deklarerar variabeln (skapar lådan) As String/Integer anger vilken typ av data (text eller heltal) Sen tilldelar vi värden och använder dem.

If-Then – Villkor

Ibland vill du göra olika saker beroende på ett villkor:

Sub KontrolleraVärde()
    Dim värde As Integer
    värde = Range("A1").Value

    If värde > 100 Then
        MsgBox "Värdet är stort"
    Else
        MsgBox "Värdet är litet"
    End If
End Sub

Om värdet i A1 är större än 100 visas ett meddelande, annars ett annat.

Loopar – Upprepa handlingar

När du vill göra samma sak många gånger använder du loopar:

Sub LoopExempel()
    Dim i As Integer

    For i = 1 To 10
        Cells(i, 1).Value = "Rad " & i
    Next i
End Sub

Detta skriver “Rad 1”, “Rad 2”, osv i cellerna A1 till A10.

For i = 1 To 10 betyder “räkna från 1 till 10” Cells(i, 1) betyder cell i rad i, kolumn 1 (kolumn A) Next i går vidare till nästa nummer

Gör makrot lättillgängligt

Nu har du fungerande makron, men varje gång du vill köra dem måste du öppna VBA-editorn och trycka F5. Det finns bättre sätt.

Metod 1: Lägg till en knapp

Steg 1: Gå till Developer-fliken

Steg 2: Klicka på Insert

Steg 3: Under “Form Controls” välj Button (första ikonen)

Steg 4: Klicka och dra för att rita knappen där du vill ha den

Steg 5: En dialogruta dyker upp – välj “FormateraRubrik” från listan

Steg 6: Klicka OK

Steg 7: Högerklicka på knappen och välj “Edit Text” för att döpa om den till “Formatera”

Nu kan du klicka på knappen för att köra makrot.

Metod 2: Kortkommando

Steg 1: Gå till Developer > Macros

Steg 2: Välj “FormateraRubrik”

Steg 3: Klicka på Options

Steg 4: I fältet “Shortcut key” skriv ett bokstav, t.ex. “f”

Steg 5: Klicka OK

Nu kan du trycka Ctrl + Shift + F för att köra makrot.

(Det blir Ctrl + Shift + [din bokstav] eftersom Ctrl + [bokstav] oftast redan används av Excel)

Metod 3: Quick Access Toolbar

Steg 1: Klicka på den lilla nedåtpilen i Quick Access Toolbar (längst upp till vänster)

Steg 2: Välj “More Commands”

Steg 3: I dropdown under “Choose commands from” välj “Macros”

Steg 4: Välj “FormateraRubrik” och klicka Add

Steg 5: Klicka OK

Nu finns en knapp för makrot i verktygsfältet, alltid tillgänglig.

Spara din arbetsbok med makron

När du sparar en arbetsbok med makron måste du använda rätt filformat.

VIKTIGT: Vanliga .xlsx-filer kan inte innehålla makron. Du måste spara som .xlsm (Excel Macro-Enabled Workbook).

Steg 1: Klicka på File > Save As

Steg 2: Välj plats (t.ex. dator eller OneDrive)

Steg 3: I “Save as type” dropdown, välj “Excel Macro-Enabled Workbook (*.xlsm)”

Steg 4: Ge filen ett namn och klicka Save

När du öppnar filen nästa gång kan det hända att Excel varnar om makron. Klicka “Enable Content” för att aktivera dina makron.

För mer om säkerhet kring makron, läs vår guide Excel makrosäkerhet.

Felsökning – När något går fel

Alla gör fel när de skriver kod. Så här åtgärdar du vanliga problem.

“Compile error: Syntax error”

Du har stavat fel eller använt fel syntax. Kontrollera: – Har varje Sub ett matchande End Sub? – Har varje If ett matchande End If? – Är alla citattecken korrekt stängda?

VBA markerar ofta raden där felet är i rött.

“Run-time error ‘1004’”

Ofta betyder detta att du refererar till en cell eller ett område som inte finns. Kontrollera: – Stavade du cellreferensen rätt? – Finns det blad eller cell du refererar till?

Makrot gör ingenting

Kontrollera: – Står markören i rätt makro när du trycker F5? – Har du aktiverat makron när du öppnade filen?

Debuggning med MsgBox

När du inte förstår vad som händer, använd MsgBox för att visa värden:

Sub DebugExample()
    Dim värde As Integer
    värde = Range("A1").Value

    MsgBox "Värdet är: " & värde  ' Visar vad variabeln innehåller
End Sub

Nästa steg på din VBA-resa

Du kan nu: – Öppna VBA-editorn – Skapa moduler och skriva makron – Formatera celler med kod – Använda variabler, villkor och loopar – Göra makron lättillgängliga

Vad gör du härnäst?

Utöka ditt första makro

Experimentera med det makro du byggt. Försök: – Ändra färgerna (testa andra RGB-värden) – Formatera fler rader – Lägg till ramar runt cellerna: Range("A1:D1").Borders.LineStyle = xlContinuous – Ändra teckenstorlek: Range("A1:D1").Font.Size = 14

Lär dig fler VBA-kommandon

Kolla in vår guide om 10 vanligaste Excel-uppgifterna du kan automatisera för konkreta exempel på användbara makron.

Bygg något meningsfullt

Tänk på en uppgift du gör ofta i Excel. Kan delar av den automatiseras? Börja enkelt: – Formatera alltid rapporter på samma sätt? Bygg ett formaterings-makro. – Kopierar ofta data från en fil till en annan? Bygg ett import-makro. – Skickar samma rapport varje vecka? Bygg ett automatiserat rapporteringssystem.

Ta en kurs

Självlärande tar dig långt, men strukturerad utbildning ger dig fundamenten snabbare. Vår VBA-kurs för nybörjare täcker allt från grunder till avancerade tekniker på en dag.

Läs vår huvudguide

För en djupdykning i VBA och Excel-automation, läs vår kompletta guide: Automatisera Excel med VBA.

Vanliga frågor för nybörjare

Måste jag kunna programmering för att lära mig VBA? Nej. VBA är designat för Excel-användare, inte programmerare. Om du kan Excel-formler kan du lära dig VBA.

Hur lång tid tar det att bli bra på VBA? Du kan bygga användbara makron efter några timmar. Att bli riktigt duktig tar några månader av regelbunden användning. Det viktiga är att börja och bygga något användbart direkt.

Kan jag förstöra något med VBA? Ja, ett makro kan radera data eller skriva över celler. Därför: testa alltid på en kopia först, och använd “Undo” (Ctrl+Z) om något går fel. Professionella makron har säkerhetskontroller, men för nybörjare: börja försiktigt.

Fungerar VBA på Mac? Ja, men vissa kommandon skiljer sig lite. De flesta grundläggande makron fungerar identiskt på Windows och Mac.

Är VBA föråldrat? Borde jag lära mig Python istället? VBA är långt ifrån föråldrat. Miljontals företag använder det dagligen. Python är kraftfullt för dataanalys, men för Excel-automation är VBA fortfarande det enklaste och mest integrerade valet.

Du är igång

För 15 minuter sen visste du ingenting om VBA. Nu har du skrivit kod, skapat makron och automatiserat Excel-uppgifter.

Det här är början. Varje makro du bygger lär dig något nytt. Varje automatiserad uppgift sparar tid och minskar fel. Varje gång du tänker “detta är jobbigt att göra manuellt” har du nu verktyget för att automatisera det.

Välkommen till VBA-världen. Du kommer spara hundratals timmar.

Har du fastnat eller vill lära dig mer?

Boka en kostnadsfri konsultation så hjälper vi dig komma vidare. Eller gå direkt till vår VBA-kurs för strukturerad utbildning.


Skriven av Lukas Lilja, Excel Department. Vi har hjälpt hundratals nybörjare ta sina första steg i VBA och bygga automation som sparar tid varje dag.