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.