Dela varje Excel-ark i separata filer (steg-för-steg)

Titta på video - Hur man delar upp varje Excel -ark i separata filer

Om du har en Excel -arbetsbok med många kalkylblad finns det inget enkelt sätt att dela upp vart och ett av dessa blad i separata Excel -filer och spara separat.

Detta kan behövas när du blad för olika månader eller regioner eller produkter/klienter och du snabbt vill få en separat arbetsbok för varje ark (som en Excel -fil eller som PDF -filer).

Även om det finns ett manuellt sätt att dela ark i separata arbetsböcker och sedan spara det, är det ineffektivt och felaktigt.

I den här självstudien ger jag dig en enkel VBA -kod som du kan använda för att snabbt (på några sekunder) dela upp alla kalkylblad i sina egna separata filer och sedan spara dessa i valfri mapp.

Dela varje kalkylblad i en separat Excel -fil

Anta att du har en arbetsbok som visas nedan där du har ett kalkylblad för varje månad.

För att dela dessa blad i en separat Excel -fil kan du använda nedanstående VBA -kod:

'Kod Skapad av Sumit Bansal från 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 Filnamn: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

Det finns några saker du måste se till innan du använder ovanstående VBA -kod:

  1. Skapa en mapp där du vill få alla resulterande filer.
  2. Spara huvudfilen i Excel (som har alla kalkylblad som du vill ha som separata filer) i den här mappen.

När du har gjort detta kan du lägga ovanstående VBA -kod i filen och köra koden.

Ovanstående kod är skriven på ett sätt så att den hämtar mappens plats med sökvägen till filen (där koden körs). Det är därför det är viktigt att spara filen i mappen först och sedan använda den här koden.

Hur fungerar VBA -koden - Koden ovan använder en enkel For Next -slinga som går igenom varje kalkylblad, skapar en kopia av kalkylbladet i en Excel -arbetsbok och sparar sedan denna Excel -arbetsbok i den angivna mappen (som är densamma som har huvudfilen med alla ark).

Nedan följer stegen för att placera denna VBA -kod i Excel -arbetsboken (dessa kommer att vara desamma för alla andra metoder som visas i den här självstudien):

Var ska man lägga den här koden?

Nedan följer stegen för att placera koden i Visual Basic Editor där den kan köras:

  • Klicka på fliken Utvecklare.
  • Klicka på alternativet Visual Basic i gruppen Kod. Detta öppnar VB Editor. [Du kan också använda kortkommandot - ALT + F11]
  • I VB Editor, högerklicka på något av objekten i arbetsboken du arbetar med.
  • För muspekaren över alternativet Infoga
  • Klicka på Modul. Detta kommer att infoga en ny modul
  • Dubbelklicka på modulobjektet. detta öppnar kodfönstret för modulen
  • Kopiera VBA -koden ovan och klistra in den i modulkodfönstret.
  • Välj en rad i koden och klicka på den gröna uppspelningsknappen i verktygsfältet för att köra VBA -makrokoden.

Stegen ovan skulle omedelbart dela upp kalkylbladen i separata Excel -filer och spara dessa. Det tar bara en sekund om du har mindre antal kalkylblad. Om du har mycket kan det ta lite tid.

Namnet på varje sparad fil är detsamma som det för bladnamnet som den hade i huvudfilen.

Eftersom du har placerat en VBA-kod i Excel-arbetsboken måste du spara detta med ett .XLSM-format (vilket är det makroaktiverade formatet). Detta säkerställer att makrot sparas och fungerar när du öppnar den här filen nästa.

Observera att jag har använt linjerna Application.ScreenUpdating = Falskt och Application.DisplayAlerts = Falskt i koden så att allt händer i backend och inte ser att saker händer på din skärm. När koden körs och delar arken och sparar dessa, vänder vi tillbaka dessa till SANT.

Som bästa praxis rekommenderas att du skapar en säkerhetskopia av huvudfilen (som har de blad som du vill dela). Detta säkerställer att du inte tappar dina data om något går fel eller om Excel bestämmer sig för att bli långsam eller krascha.

Dela varje kalkylblad och spara som separata PDF -filer

Om du vill dela kalkylblad och spara dessa som PDF -filer istället för Excel -filer kan du använda nedanstående kod:

'Kod Skapad av Sumit Bansal från 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 Typ: = xlTypePDF, filnamn: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

Saker du måste se till innan du använder den här koden:

  1. Skapa en mapp där du vill få alla resulterande filer.
  2. Spara huvudfilen i Excel (som har alla kalkylblad som du vill ha som separata filer) i den här mappen.

Koden ovan delar upp varje ark i Excel -filen och sparar det som en PDF -fil i samma mapp där du har sparat huvudfilen i Excel.

Dela endast de kalkylblad som innehåller ett ord/en fras i separata Excel -filer

Om du har många blad i en arbetsbok och du bara vill dela upp de blad som har en specifik text i det, kan du också göra det.

Anta till exempel att du har en Excel -fil där du data i flera år och varje blad i filen har årnumret som prefix. Något som visas nedan:

Låt oss nu säga att du vill dela upp alla blad för 2020-2022 och spara dessa som separata Excel-filer. För att göra detta måste du på något sätt kontrollera namnet på varje kalkylblad och endast de blad som har numret2021-2022 ska delas upp och sparas, och resten ska lämnas orörd.

Detta kan göras med följande VBA -makrokod:

'Kod Skapad av Sumit Bansal från 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. Ark Om InStr (1, ws.Name, TexttoFind, vbBinaryCompare) 0 Sedan ws.Copy Application.ActiveWorkbook.SaveAs filnamn: = FPath & "\" & ws.Name & ".xlsx" Application.ActiveWorkbook.Close False End If Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

I koden ovan har jag använt en variabel TexttoFind, som har tilldelats “2020” i början.

VBA -koden använder sedan For Next -slingan i VBA för att gå igenom varje kalkylblad och sedan kontrollera namnet på varje kalkylblads INSTR -funktion. Denna funktion kontrollerar om kalkylbladets namn har ordet2021-2022 i det eller inte. Om det gör det kommer det att returnera ett positionsnummer där den hittar den här texten (vilket är2021-2022 i det här fallet).

Och om den inte hittar texten vi letar efter returnerar den 0.

Detta används med IF Then -villkoret. Så om ett bladnamn har texten string2021-2022 i det, kommer det att delas upp och sparas som en separat fil. Och om den inte har denna textsträng skulle IF -villkoret inte uppfyllas och ingenting skulle hända.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave