När du arbetar med olika datakällor kan du ofta kämpa för att kompilera flera arbetsböcker och kalkylblad innan du kommer fram till en sista databit. Föreställ dig en situation där du har några hundra arbetsböcker att kombinera innan du ens kan börja din dag.
Ingen vill tillbringa oändliga timmar med att arbeta på olika källor, öppna varje arbetsbok, kopiera och klistra in data från olika ark, innan du slutligen gör en konsoliderad arbetsbok. Vad händer om ett VBA-makro kan göra detta åt dig?
Med den här guiden kan du skapa din egen Excel VBA-makrokod för att konsolidera flera arbetsböcker, allt på några minuter (om datafilerna är många).
Förutsättningar för att skapa din egen VBA-makrokod
Du behöver en arbetsbok för att innehålla VBA-koden, medan resten av källdataarbetsböckerna är separata. Skapa dessutom en arbetsbok Konsoliderat för att lagra den konsoliderade data från alla dina arbetsböcker.
Skapa en mapp Konsolidering på din föredragna plats för att lagra alla dina källarbetsböcker. När makrot körs, växlar det genom varje arbetsbok som är lagrad i den här mappen, kopierar innehållet från olika ark och placerar det i den konsoliderade arbetsboken.
Skapa din egen Excel VBA-kod
När förutsättningarna är ur vägen är det dags att fördjupa sig i koden och börja hacka på grunderna för att anpassa den till dina krav.
Relaterad: Avancerade Microsoft Excel-funktioner du måste känna till
tryck på Alt+F11 tangenten på Excel för att öppna VBA-makrokodredigeraren. Klistra in koden nedan och spara filen som en makroaktiverad arbetsbok (.xlsm förlängning).
Sub openfiles()
'deklarera de variabler som används i VBA-koden
Dim MyFolder As String, MyFile As String, wbmain As Workbook, lastrow As Long
'avaktivera dessa funktioner för att förbättra kodbehandlingen
Med applikation
.DisplayAlerts = False
.ScreenUpdating = Falskt
Sluta med'ändra sökvägen till mappen där dina filer ska sparas
MyFolder = InputBox("Ange sökvägen till konsolideringsmappen") & "\"
'definiera referensen för mappen i en makrovariabel
MyFile = Dir (MyFolder)
'öppna en slinga för att bläddra igenom varje enskild arbetsbok som finns lagrad i mappen
Gör medan Len (MyFile) > 0
'aktivera Consolidation-arbetsboken
Windows ("Konsolidering"). Aktivera
'beräkna den senast fyllda raden
Range("a1048576"). Välj
Urval. Slut (xlUp). Välj
ActiveCell. Offset (1, 0). VäljÖppna den första arbetsboken i konsolideringsmappen
Arbetsböcker. Öppna Filename:=MyFolder & MyFile
Windows (MyFile).Aktivera
'gå igenom varje ark i arbetsböckerna för att kopiera data
Dim ws As Arbetsblad
För varje är i arkws. Aktivera
ws. AutoFilterMode = False"ignorera rubriken och kopiera data från rad 2
Om celler (2, 1) = "" Gå till 1Gå till 10
1: Nästa
10: Range("a2:az20000"). Kopiera
Windows ("Konsolidering"). Aktivera
'klistra in det kopierade innehållet
ActiveSheet. Klistra
Windows (MyFile).Aktivera
'Stäng den öppna arbetsboken när data har klistrats in
ActiveWorkbook. Stänga
'töm cacheminnet för att lagra värdet på nästa arbetsbok
MyFile = Dir()
'öppna nästa fil i mappen
Slinga
'aktivera de inaktiverade funktionerna för framtida användning
Med applikation
.DisplayAlerts = Sant
.ScreenUpdating = Sant
Sluta med
Avsluta Sub
VBA-koden förklaras
Den första delen av koden definierar en subrutin som innehåller all din VBA-kod. Definiera subrutinen med sub, följt av kodens namn. Undernamnet kan vara vad som helst; helst bör du behålla ett namn som är relevant för koden du ska skriva.
Relaterad: Webbplatser och bloggar för att lära dig Excel-tips och tricks
Excel VBA förstår användarskapade variabler och deras motsvarande datatyper som deklareras med dämpa (dimensionera).
För att öka bearbetningshastigheten för din kod kan du stänga av skärmuppdateringen och undertrycka alla varningar, eftersom det saktar ner kodexekveringen.
Användaren kommer att bli tillfrågad om sökvägen till mappen där datafilerna lagras. En slinga skapas för att öppna varje arbetsbok som är lagrad i mappen, kopiera data från varje ark och lägga till den i Konsolidering arbetsbok.
Arbetsboken Konsolidering aktiveras så att Excel VBA kan beräkna den senast ifyllda raden. Den sista cellen i kalkylbladet väljs och den sista raden beräknas i arbetsboken med hjälp av offsetfunktionen. Detta är mycket användbart när makrot börjar lägga till data från källfilerna.
När loopen öppnar den första källfilen tas filtren bort från varje enskilt ark (om de existerar), och data från A2 till AZ20000 kommer att kopieras och klistras in i konsolideringen arbetsbok.
Processen upprepas tills alla arbetsboksblad har lagts till i huvudarbetsboken.
Relaterad: De bästa onlinekurserna för att behärska avancerad Excel
Slutligen stängs källfilen när all data har klistrats in. Nästa arbetsbok öppnas så att VBA-makrot kan upprepa samma steg för nästa uppsättning filer.
Slingan är kodad för att köras tills alla filer automatiskt uppdateras i huvudarbetsboken.
Användarbaserade anpassningar
Ibland vill du inte oroa dig för inbyggda uppmaningar, särskilt om du är slutanvändaren. Om du hellre vill hårdkoda sökvägen till konsolideringsmappen i koden kan du ändra den här delen av koden:
MyFolder = InputBox("Ange sökvägen till konsolideringsmappen") & "\"
Till:
MyFolder = "Mappsökväg" & "\"
Dessutom kan du också ändra kolumnreferenserna, eftersom steget inte ingår i denna kod. Ersätt bara slutkolumnreferensen med ditt senast ifyllda kolumnvärde (A-Ö, i det här fallet). Du måste komma ihåg att den senast ifyllda raden beräknas via makrokoden, så du behöver bara ändra kolumnreferensen.
För att få ut det mesta av detta makro kan du bara använda det för att konsolidera arbetsböcker i samma format. Om strukturerna är olika kan du inte använda detta VBA-makro.
Konsolidera flera arbetsböcker med Excel VBA-makro
Att skapa och ändra en Excel VBA-kod är relativt enkelt, speciellt om du förstår några av nyanserna i koden. VBA går systematiskt igenom varje kodrad och exekverar den rad för rad.
Om du gör några ändringar i koden måste du se till att du inte ändrar ordningen på koderna, eftersom det kommer att störa kodens exekvering.
Gör datahantering till en lek med dessa Excel-makron.
Läs Nästa
- Programmering
- Programmering
- Microsoft excel

Gaurav Siyal har två års erfarenhet av att skriva, skriva för en rad digitala marknadsföringsföretag och programvarulivscykeldokument.
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera