Se video - Sådan deles hvert Excel -ark i separate filer
Hvis du har en Excel -projektmappe med mange regneark, er der ingen nem måde at opdele hvert af disse ark i separate Excel -filer og gemme separat.
Dette kan være nødvendigt, når du ark til forskellige måneder eller regioner eller produkter/klienter, og du hurtigt vil have en separat projektmappe til hvert ark (som en Excel -fil eller som PDF -filer).
Selvom der er en manuel måde at opdele ark i separate projektmapper og derefter gemme det, er det ineffektivt og tilbøjeligt til fejl.
I denne vejledning giver jeg dig en simpel VBA -kode, som du kan bruge til hurtigt (på få sekunder) at dele alle regnearkene i deres egne separate filer og derefter gemme dem i en hvilken som helst angivet mappe.
Opdel hvert regneark i en separat Excel -fil
Antag, at du har en projektmappe som vist herunder, hvor du har et regneark for hver måned.
For at opdele disse ark i en separat Excel -fil kan du bruge nedenstående VBA -kode:
'Code Created by Sumit Bansal from trumpexcel.com Sub SplitEachWorksheet () Dim FPath As String FPath = Application.ActiveWorkbook.Path Application.ScreenUpdating = False Application.DisplayAlerts = False For each ws In ThisWorkbook.Sheets ws.Copy Application.ActiveWorkbook.SaveAs Filnavn: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Der er et par ting, du skal sørge for, før du bruger ovenstående VBA -kode:
- Opret en mappe, hvor du vil hente alle de resulterende filer.
- Gem hoved Excel -filen (som har alle de regneark, du vil have som separate filer) i denne mappe.
Når du har gjort dette, kan du sætte ovenstående VBA -kode i filen og køre koden.
Ovenstående kode er skrevet på en måde, så den henter mappens placering ved hjælp af filens sti (hvor koden køres). Derfor er det vigtigt at gemme filen i mappen først og derefter bruge denne kode.
Hvordan fungerer VBA -koden - Ovenstående kode bruger en simpel For Next loop, der går gennem hvert regneark, opretter en kopi af regnearket i en Excel -projektmappe og derefter gemmer denne Excel -projektmappe i den angivne mappe (som er den samme, der har hovedfilen med alle de ark).
Nedenfor er trinene til at placere denne VBA -kode i Excel -projektmappen (disse vil være ens for alle de andre metoder, der vises i denne vejledning):
Hvor skal denne kode placeres?
Nedenfor er trinene til at placere koden i Visual Basic Editor, hvor den kan udføres:
- Klik på fanen Udvikler.
- Klik på indstillingen Visual Basic i gruppen Kode. Dette åbner VB Editor. [Du kan også bruge tastaturgenvejen - ALT + F11]
- I VB Editor skal du højreklikke på ethvert af objekterne i den projektmappe, du arbejder på.
- Hold markøren over indstillingen Indsæt
- Klik på Modul. Dette vil indsætte et nyt modul
- Dobbeltklik på modulobjektet. dette åbner kodevinduet for modulet
- Kopiér VBA -koden ovenfor, og indsæt den i modulkodevinduet.
- Vælg en hvilken som helst linje i koden, og klik på den grønne afspilningsknap i værktøjslinjen for at køre VBA -makrokoden.
Ovenstående trin ville øjeblikkeligt opdele regnearkene i separate Excel -filer og gemme disse. Det tager kun et sekund, hvis du har et færre antal regneark. Hvis du har meget, kan det tage noget tid.
Navnet på hver gemt fil er det samme som navnet på det arknavn, den havde i hovedfilen.
Da du har placeret en VBA-kode i Excel-projektmappen, skal du gemme dette med et .XLSM-format (som er det makroaktiverede format). Dette sikrer, at makroen gemmes og fungerer, når du åbner denne fil næste gang.
Bemærk, at jeg har brugt linjerne Application.ScreenUpdating = Falsk og Application.DisplayAlerts = Falsk i koden, så alt sker i backend og ikke kan se tingene ske på din skærm. Når koden kører og deler arkene og gemmer disse, vender vi disse tilbage til SAND.
Som en god praksis anbefales det at oprette en sikkerhedskopi af hovedfilen (som har de ark, du vil dele). Dette sikrer, at du ikke mister dine data, hvis noget går galt, eller hvis Excel beslutter at blive langsom eller gå ned.
Opdel hvert regneark og gem som separate PDF -filer
Hvis du vil opdele regnearkene og gemme disse som PDF -filer i stedet for Excel -filerne, kan du bruge nedenstående kode:
'Code Created by Sumit Bansal from trumpexcel.com Sub SplitEachWorksheet () Dim FPath As String FPath = Application.ActiveWorkbook.Path Application.ScreenUpdating = False Application.DisplayAlerts = False For each ws In ThisWorkbook.Sheets ws.Copy Application.ActiveSheet.ExportAsFixed Type: = xlTypePDF, filnavn: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Ting, du skal sørge for, før du bruger denne kode:
- Opret en mappe, hvor du vil hente alle de resulterende filer.
- Gem hoved Excel -filen (som har alle de regneark, du vil have som separate filer) i denne mappe.
Ovenstående kode opdeler hvert ark i Excel -filen og gemmer det som en PDF i den samme mappe, hvor du har gemt hoved Excel -filen.
Opdel kun de regneark, der indeholder et ord/en sætning, i separate Excel -filer
Hvis du har mange ark i en projektmappe, og du kun vil opdele de ark, der har en bestemt tekst i det, kan du også gøre det.
Antag for eksempel, at du har en Excel -fil, hvor du data i flere år, og hvert ark i filen har årnummeret som præfiks. Noget som vist herunder:
Lad os nu sige, at du vil dele alle arkene for2021-2022 og gemme dem som separate Excel-filer. For at gøre dette skal du på en eller anden måde kontrollere navnet på hvert regneark, og kun de ark, der har nummeret 2021-2022, skal deles og gemmes, og resten skal være uberørt.
Dette kan gøres ved hjælp af følgende VBA -makrokode:
'Code Created by Sumit Bansal from trumpexcel.com Sub SplitEachWorksheet () Dim FPath As String Dim TexttoFind As String TexttoFind = "2020" FPath = Application.ActiveWorkbook.Path Application.ScreenUpdating = False Application.DisplayAlerts = False For each ws In ThisWorkbook. Sheets If InStr (1, ws.Name, TexttoFind, vbBinaryCompare) 0 Herefter ws.Copy Application.ActiveWorkbook.SaveAs Filnavn: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
I ovenstående kode har jeg brugt en variabel TexttoFind, som i begyndelsen er blevet tildelt “2020”.
VBA -koden bruger derefter For Next -løkken i VBA til at gå gennem hvert regneark og derefter kontrollere navnet på hvert regnearks INSTR -funktion. Denne funktion kontrollerer, om regnearksnavnet har ordet2021-2022 i det eller ej. Hvis det gør det, returnerer det et positionsnummer, hvor det finder denne tekst (hvilket er2021-2022 i dette tilfælde).
Og hvis den ikke finder den tekst, vi leder efter, returnerer den 0.
Dette bruges med IF Then -betingelsen. Så hvis et arknavn har teksten string2021-2022 i det, bliver det delt og gemt som en separat fil. Og hvis den ikke har denne tekststreng, ville IF -betingelsen ikke være opfyldt, og der ville ikke ske noget.