Når du arbeider med varierte datakilder, kan du ofte slite med å kompilere flere arbeidsbøker og regneark før du kommer til en siste databit. Tenk deg en situasjon der du har noen hundre arbeidsbøker å kombinere før du i det hele tatt kan begynne dagen.
Ingen ønsker å bruke endeløse timer på å jobbe med forskjellige kilder, åpne hver arbeidsbok, kopiere og lime inn data fra forskjellige ark, før de til slutt lager en konsolidert arbeidsbok. Hva om en VBA-makro kan gjøre dette for deg?
Med denne veiledningen kan du lage din egen Excel VBA-makrokode for å konsolidere flere arbeidsbøker, alt i løpet av få minutter (hvis datafilene er mange).
Forutsetninger for å lage din egen VBA-makrokode
Du trenger én arbeidsbok for å inneholde VBA-koden, mens resten av kildedataarbeidsbøkene er separate. Lag i tillegg én arbeidsbok Konsolidert for å lagre de konsoliderte dataene fra alle arbeidsbøkene dine.
Opprett en mappe Konsolidering på ditt foretrukne sted for å lagre alle kildearbeidsbøkene dine. Når makroen kjører, vil den veksle mellom hver arbeidsbok som er lagret i denne mappen, kopiere innholdet fra forskjellige ark og plassere det i den konsoliderte arbeidsboken.
Lag din egen Excel VBA-kode
Når forutsetningene er ute av veien, er det på tide å fordype seg i koden og begynne å hacke løs på det grunnleggende for å tilpasse den til dine behov.
I slekt: Avanserte Microsoft Excel-funksjoner du må kjenne til
trykk Alt+F11 tasten på Excel for å åpne VBA-makrokodeeditoren. Lim inn koden skrevet nedenfor og lagre filen som en makroaktivert arbeidsbok (.xlsm Utvidelse).
Sub openfiles()
'erklære variablene som brukes i VBA-koden
Dim MyFolder As String, MyFile As String, wbmain As Workbook, lastrow As Long
deaktiver disse funksjonene for å forbedre kodebehandlingen
Med applikasjon
.DisplayAlerts = False
.ScreenUpdating = False
Avslutt med'endre banen til mappen der filene dine skal lagres
MyFolder = InputBox("Skriv inn banen til konsolideringsmappen") & "\"
'definer referansen til mappen i en makrovariabel
MyFile = Dir (MyFolder)
åpne en sløyfe for å bla gjennom hver enkelt arbeidsbok som er lagret i mappen
Gjør mens Len (MyFile) > 0
'aktiver Consolidation-arbeidsboken
Windows ("Konsolidering"). Aktiver
'beregn den siste fylte raden
Range("a1048576"). Velg
Utvalg. Slutt (xlUp). Velg
ActiveCell. Offset (1, 0). Velg'åpne den første arbeidsboken i Konsolidering-mappen
Arbeidsbøker. Åpne Filnavn:=Min mappe og min fil
Windows (Min fil). Aktiver
'gå gjennom hvert ark i arbeidsbøkene for å kopiere dataene
Dim ws As Worksheet
For hver er i arkws. Aktiver
ws. AutoFilterMode = False'ignorer overskriften og kopier dataene fra rad 2
Hvis celler (2, 1) = "" Gå til 1Gå til 10
1: Neste
10: Range("a2:az20000"). Kopi
Windows ("Konsolidering"). Aktiver
'lim inn det kopierte innholdet
Aktivt ark. Lim inn
Windows (Min fil). Aktiver
'lukk den åpne arbeidsboken når dataene er limt inn
Active Workbook. Lukk
'tøm hurtigbufferen for å lagre verdien til neste arbeidsbok
MyFile = Dir()
'åpne neste fil i mappen
Løkke
'aktiver de deaktiverte funksjonene for fremtidig bruk
Med applikasjon
.DisplayAlerts = Sant
.ScreenUpdating = Sant
Avslutt med
End Sub
VBA-koden forklart
Den første delen av koden definerer en subrutine, som inneholder all VBA-koden din. Definer subrutinen med under, etterfulgt av navnet på koden. Undernavnet kan være hva som helst; ideelt sett bør du beholde et navn som er relevant for koden du skal skrive.
I slekt: Nettsteder og blogger for å lære Excel-tips og triks
Excel VBA forstår brukerlagde variabler og deres tilsvarende datatyper deklarert med dempet (dimensjon).
For å øke behandlingshastigheten til koden din, kan du slå av skjermoppdatering og undertrykke alle varsler, da det bremser kjøringen av koden.
Brukeren vil bli bedt om banen til mappen der datafilene er lagret. En løkke opprettes for å åpne hver arbeidsbok som er lagret i mappen, kopiere dataene fra hvert ark og legge dem til Konsolidering arbeidsbok.
Konsolideringsarbeidsboken er aktivert slik at Excel VBA kan beregne den siste fylte raden. Den siste cellen i regnearket er valgt, og den siste raden beregnes i arbeidsboken ved å bruke offset-funksjonen. Dette er svært nyttig når makroen begynner å legge til data fra kildefilene.
Når loopen åpner den første kildefilen, fjernes filtrene fra hvert enkelt ark (hvis de eksisterer), og dataene fra A2 til AZ20000 vil bli kopiert og limt inn i konsolideringen arbeidsbok.
Prosessen gjentas til alle arbeidsbokarkene er lagt til i hovedarbeidsboken.
I slekt: Beste nettkurs for å mestre avansert Excel
Til slutt lukkes kildefilen når alle dataene er limt inn. Den neste arbeidsboken åpnes slik at VBA-makroen kan gjenta de samme trinnene for neste sett med filer.
Sløyfen er kodet for å kjøre til alle filene blir automatisk oppdatert i hovedarbeidsboken.
Brukerbaserte tilpasninger
Noen ganger vil du ikke bekymre deg for innebygde spørsmål, spesielt hvis du er sluttbrukeren. Hvis du heller vil hardkode banen til konsolideringsmappen i koden, kan du endre denne delen av koden:
MyFolder = InputBox("Skriv inn banen til konsolideringsmappen") & "\"
Til:
MyFolder = "Mappebane" og "\"
I tillegg kan du også endre kolonnereferansene, siden trinnet ikke er inkludert i denne koden. Bare bytt ut sluttkolonnereferansen med den sist utfylte kolonneverdien (AZ, i dette tilfellet). Du må huske at den siste fylte raden beregnes via makrokoden, så du trenger kun å endre kolonnereferansen.
For å få mest mulig ut av denne makroen kan du bare bruke den til å konsolidere arbeidsbøker i samme format. Hvis strukturene er forskjellige, kan du ikke bruke denne VBA-makroen.
Konsolidere flere arbeidsbøker ved hjelp av Excel VBA-makro
Det er relativt enkelt å lage og endre en Excel VBA-kode, spesielt hvis du forstår noen av nyansene i koden. VBA kjører systematisk gjennom hver kodelinje og kjører den linje for linje.
Hvis du gjør endringer i koden, må du sørge for at du ikke endrer rekkefølgen på kodene, da det vil forstyrre kjøringen av koden.
Gjør dataadministrasjon til en lek med disse Excel-makroene.
Les Neste
- Programmering
- Programmering
- Microsoft Excel
Gaurav Siyal har to års skriveerfaring, og har skrevet for en rekke digitale markedsføringsfirmaer og programvarelivssyklusdokumenter.
Abonner på vårt nyhetsbrev
Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!
Klikk her for å abonnere