Hoppa till huvudinnehåll

Excel-tips: Dela upp data i flera kalkylblad/arbetsböcker baserat på kolumnvärde

Författare: Xiaoyang Senast ändrad: 2024-04-26

När du hanterar stora datamängder i Excel kan det vara mycket fördelaktigt att dela upp data i flera kalkylblad baserat på specifika kolumnvärden. Denna metod förbättrar inte bara organiseringen av data utan förbättrar också läsbarheten och underlättar dataanalys.

Anta att du har en stor försäljningspost som innehåller flera poster som produktnamnet, kvantiteten såld under det första kvartalet. Målet är att dela upp dessa data i separata kalkylblad baserat på varje produktnamn så att individuella försäljningsresultat kan analyseras separat.

Dela upp data i flera kalkylblad baserat på kolumnvärde

Dela upp data i flera arbetsböcker baserat på kolumnvärde med VBA-kod


Dela upp data i flera kalkylblad baserat på kolumnvärde

Normalt kan du sortera datalistan först och sedan kopiera och klistra in dem en efter en i andra nya kalkylblad. Men detta kommer att kräva ditt tålamod för att kopiera och klistra upprepade gånger. I det här avsnittet kommer vi att introducera två enkla metoder för att effektivt hantera denna uppgift i Excel, vilket sparar tid och minskar risken för fel.

Dela upp data i flera kalkylblad baserat på kolumnvärde med VBA-kod

1. Håll ner ALT + F11 nycklar för att öppna Microsoft Visual Basic för applikationer fönster.

2. klick Insert > Modulernaoch klistra in följande kod i modulfönstret.

Sub Splitdatabycol()
'updateby Extendoffice
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
Dim xWS As Worksheet
On Error Resume Next
Set xTRg = Application.InputBox("Please select the header rows:", "Kutools for Excel", "", Type:=8)
If TypeName(xTRg) = "Nothing" Then Exit Sub
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", "", Type:=8)
If TypeName(xVRg) = "Nothing" Then Exit Sub
vcol = xVRg.Column
Set ws = xTRg.Worksheet
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
Else
Sheets("xTRgWs_Sheet").Delete
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet"
End If
Set xWSTRg = Sheets("xTRgWs_Sheet")
xTRg.Copy
xWSTRg.Paste Destination:=xWSTRg.Range("A1")
ws.Activate
For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Set xWS = Sheets.Add(after:=Worksheets(Worksheets.Count))
xWS.Name = myarr(i) & ""
Else
xWS.Move after:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
xWS.Paste Destination:=xWS.Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy xWS.Range("A" & (titlerow + xTRg.Rows.Count))
Sheets(myarr(i) & "").Columns.AutoFit
Next
xWSTRg.Delete
ws.AutoFilterMode = False
ws.Activate
Application.DisplayAlerts = True
End Sub

3. Tryck sedan på F5 för att köra koden, och en uppmaningsruta dyker upp för att påminna dig om att välja rubrikraden och klicka sedan på OK. Se skärmdump:

4. I den andra uppmaningsrutan, välj kolumndata som du vill dela upp baserat på och klicka sedan OK. Se skärmdump:

5. All data i det aktiva kalkylbladet är uppdelat i flera kalkylblad baserat på kolumnvärdena. De resulterande kalkylbladen namnges enligt värdena i de delade cellerna och placeras i slutet av arbetsboken. Se skärmdump:

 

Dela upp data i flera kalkylblad baserat på kolumnvärde med Kutools för Excel

Kutools för Excel ger smart funktion - Split data direkt in i din Excel-miljö. Att dela upp data i flera kalkylblad är inte längre en utmaning. Vårt intuitiva verktyg delar automatiskt upp din datamängd baserat på det valda kolumnvärdet eller antalet rader, vilket säkerställer att varje information är precis där du behöver den. Säg adjö till den tråkiga uppgiften att manuellt organisera dina kalkylblad och omfamna ett snabbare, felfritt sätt att hantera din data.

Anmärkningar: Att tillämpa detta Split dataFör det första bör du ladda ner Kutools för Excel, och använd sedan funktionen snabbt och enkelt.

När du har installerat Kutools för Excel, välj dataintervallet och klicka sedan Kutools Plus > Split data att öppna Dela upp data i flera kalkylblad dialog ruta.

  1. Välja Specifik kolumn alternativet i Dela baserat på och välj det kolumnvärde som du vill dela data baserat på från rullgardinsmenyn.
  2. Om dina data har rubriker och du vill infoga dem i varje nytt delat kalkylblad, kontrollera Mina data har rubriker alternativ. (Du kan ange antalet rubrikrader baserat på dina data. Om din data till exempel innehåller två rubriker, skriv 2.)
  3. Sedan kan du ange namnen på delat kalkylblad under Nytt kalkylbladets namn sektion, ange regeln för kalkylbladsnamn från rullgardinsmenyn Regler, kan du lägga till Prefix or Ändelse för arknamnen också.
  4. Klicka på OK knapp. Se skärmdump:

Nu delas data i kalkylbladet upp i flera kalkylblad i en ny arbetsbok.


Dela upp data i flera arbetsböcker baserat på kolumnvärde med VBA-kod

Ibland, snarare än att dela upp data i flera kalkylblad, kan det vara mer fördelaktigt att dela upp data i separata arbetsböcker baserat på en nyckelkolumn. Här är en steg-för-steg-guide om hur du använder VBA-kod för att automatisera processen att dela upp data i flera arbetsböcker baserat på ett specifikt kolumnvärde.

1. Håll ner ALT + F11 nycklar för att öppna Microsoft Visual Basic för applikationer fönster.

2. klick Insert > Modulernaoch klistra in följande kod i Modulfönster.

Sub SplitDataByColToWorkbooks()
    ' Updateby Extendoffice
    Dim lr As Long
    Dim ws As Worksheet
    Dim vcol, i As Integer
    Dim myarr As Variant
    Dim title As String
    Dim titlerow As Integer
    Dim xTRg As Range
    Dim xVRg As Range
    Dim xWS As Workbook
    Dim savePath As String
    ' Set the directory to save new workbooks
    savePath = "C:\Users\AddinsVM001\Desktop\multiple files\" ' Modify this path as needed
    Application.DisplayAlerts = False
    Set xTRg = Application.InputBox("Please select the header rows:", "Kutools for Excel", Type:=8)
    If TypeName(xTRg) = "Nothing" Then Exit Sub
    Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Kutools for Excel", Type:=8)
    If TypeName(xVRg) = "Nothing" Then Exit Sub
    vcol = xVRg.Column
    Set ws = xTRg.Worksheet
    lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
    title = xTRg.Address(False, False)
    titlerow = xTRg.Row
    ws.Columns(vcol).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ws.Cells(1, ws.Columns.Count), Unique:=True
    myarr = Application.Transpose(ws.Cells(1, ws.Columns.Count).Resize(ws.Cells(ws.Rows.Count, ws.Columns.Count).End(xlUp).Row).Value)
    ws.Cells(1, ws.Columns.Count).Resize(ws.Cells(ws.Rows.Count, ws.Columns.Count).End(xlUp).Row).ClearContents
    For i = 2 To UBound(myarr)
        Set xWS = Workbooks.Add
        ws.Range(title).AutoFilter Field:=vcol, Criteria1:=myarr(i)
        ws.Range("A" & titlerow & ":A" & lr).SpecialCells(xlCellTypeVisible).EntireRow.Copy
        xWS.Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteAll
        xWS.SaveAs Filename:=savePath & myarr(i) & ".xlsx"

        xWS.Close SaveChanges:=False
    Next i
    ws.AutoFilterMode = False
    Application.DisplayAlerts = True
    ws.Activate
End Sub
Anmärkningar: I ovanstående kod bör du ändra filsökvägen till din egen där de delade arbetsböckerna sparas i det här skriptet: savePath = "C:\Users\AddinsVM001\Desktop\flera filer\".

3. Tryck sedan på F5 för att köra koden, och en uppmaningsruta dyker upp för att påminna dig om att välja rubrikraden och klicka sedan på OK. Se skärmdump:

4. I den andra uppmaningsrutan, välj kolumndata som du vill dela upp baserat på och klicka sedan OK. Se skärmdump:

5. Efter uppdelningen delas all data i det aktiva kalkylbladet upp i flera arbetsböcker baserat på kolumnvärdena. Alla delade arbetsböcker sparas i den mapp du angav. Se skärmdump:

Relaterade artiklar:

  • Dela data i flera kalkylblad efter antal rader
  • Att effektivt dela upp ett stort dataintervall i flera Excel-kalkylblad baserat på ett specifikt radantal kan effektivisera datahanteringen. Att till exempel dela upp en datauppsättning var 5:e rad i flera ark kan göra den mer hanterbar och organiserad. Den här guiden erbjuder två praktiska metoder för att utföra denna uppgift snabbt och enkelt.
  • Slå samman två eller flera tabeller till en baserad på nyckelkolumner
  • Om du antar att du har tre tabeller i en arbetsbok, nu vill du slå samman dessa tabeller i en tabell baserat på motsvarande nyckelkolumner för att få resultatet enligt nedanstående skärmdump. Det här kan vara en besvärlig uppgift för de flesta av oss, men oroa dig inte, den här artikeln, jag kommer att introducera några metoder för att lösa detta problem.
  • Dela upp textsträngar med avgränsare i flera rader
  • Normalt kan du använda funktionen Text till kolumn för att dela upp cellinnehåll i flera kolumner med en specifik avgränsare, såsom kommatecken, punkt, semikolon, snedstreck, etc. Men ibland kan du behöva dela upp det avgränsade cellinnehållet i flera rader och upprepa data från andra kolumner enligt skärmbilden nedan. Har du några bra sätt att hantera denna uppgift i Excel? Denna handledning introducerar några effektiva metoder för att slutföra det här jobbet i Excel.
  • Dela upp flerrads cellinnehåll i separerade rader/kolumner
  • Om du antar att du har cellinnehåll med flera rader som separeras med Alt + Enter, och nu måste du dela upp flerradsinnehållet till separerade rader eller kolumner, vad kan du göra? I den här artikeln kommer du att lära dig hur du snabbt delar upp flerradscellinnehåll i separerade rader eller kolumner.

Bästa kontorsproduktivitetsverktyg

🤖 Kutools AI Aide: Revolutionera dataanalys baserat på: Intelligent utförande   |  Generera kod  |  Skapa anpassade formler  |  Analysera data och generera diagram  |  Anropa Kutools funktioner.
Populära funktioner: Hitta, markera eller identifiera dubbletter   |  Ta bort tomma rader   |  Kombinera kolumner eller celler utan att förlora data   |   Rund utan formel ...
Superuppslag: Flera kriterier VLookup    VLookup med flera värden  |   VSök över flera ark   |   Fuzzy Lookup ....
Avancerad rullgardinslista: Skapa snabbt en rullgardinslista   |  Beroende rullgardinslista   |  Flervals-rullgardinslista ....
Kolumnhanterare: Lägg till ett specifikt antal kolumner  |  Flytta kolumner  |  Växla synlighetsstatus för dolda kolumner  |  Jämför intervall och kolumner ...
Utvalda funktioner: Rutnätsfokus   |  Designvy   |   Stor formelbar    Arbetsbok & Bladhanterare   |  Resursbibliotek (Automatisk text)   |  Datumväljare   |  Kombinera arbetsblad   |  Kryptera/Dekryptera celler    Skicka e-postmeddelanden efter lista   |  Superfilter   |   Specialfilter (filtrera fet/kursiv/genomstruken...) ...
Topp 15 verktygssatser12 text verktyg (lägga till text, Ta bort tecken, ...)   |   50+ Diagram Typer (Gantt Chart, ...)   |   40+ Praktiskt Formler (Beräkna ålder baserat på födelsedag, ...)   |   19 Införande verktyg (Infoga QR-kod, Infoga bild från sökväg, ...)   |   12 Konvertering verktyg (Siffror till ord, Valutaväxling, ...)   |   7 Slå ihop och dela verktyg (Avancerade kombinera rader, Dela celler, ...)   |   ... och mer

Uppgradera dina Excel-färdigheter med Kutools för Excel och upplev effektivitet som aldrig förr. Kutools för Excel erbjuder över 300 avancerade funktioner för att öka produktiviteten och spara tid.  Klicka här för att få den funktion du behöver mest...

Beskrivning


Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
Comments (312)
Rated 5 out of 5 · 2 ratings
This comment was minimized by the moderator on the site
Sub SplitDataByColWorkbook()
Dim lr As Long
Dim ws As Worksheet
Dim vcol As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
Dim xWS As Workbook
Dim wb As Workbook


Set wb = ThisWorkbook
Set ws = wb.Sheets(1) ' Assuming you want to work with the first sheet in the workbook

On Error Resume Next
Set xTRg = Application.InputBox("Please select the header rows:", "Select Header Rows", Type:=8)
If xTRg Is Nothing Then Exit Sub

On Error Resume Next
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Select Split Column", Type:=8)
If xVRg Is Nothing Then Exit Sub

vcol = xVRg.Column
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"

Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet'!A1)") Then
Set xWS = Workbooks.Add
Else
Set xWS = Workbooks.Add
End If

Set xWSTRg = xWS.Sheets(1)
xTRg.Copy
xWSTRg.Range("A1").PasteSpecial Paste:=xlPasteValues
ws.Activate

For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next

myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear

For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
Set xWS = Workbooks.Add
Set xWSTRg = xWS.Sheets(1)
xTRg.Copy
xWSTRg.Range("A1").PasteSpecial Paste:=xlPasteValues
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy xWSTRg.Range("A" & (titlerow + xTRg.Rows.Count))
xWSTRg.Columns.AutoFit
xWS.SaveAs myarr(i) & ".xlsx" ' Change the file name as needed
xWS.Close SaveChanges:=False
Next

ws.AutoFilterMode = False
wb.Activate
Application.DisplayAlerts = True
End Sub
This comment was minimized by the moderator on the site
First of all, thank you for the macro.

I would like to ask if there is any way to maintain the column widths. My 'original' tab was completely formatted. However, after running the macro, it loses the column formatting and appears quite messy.

English is not my first language (sorry).

Thank you again!
Rated 5 out of 5
This comment was minimized by the moderator on the site
The original header is not copied in the split sheet.
This comment was minimized by the moderator on the site
This works wonderfully, thank you very much!!! Huge time-saver.
Rated 5 out of 5
This comment was minimized by the moderator on the site
Hello,

I am having a hard time getting this code to work. When I run it, it just creates a duplicate sheet and does not split columns into multiple sheets.

I do have values that exceed 31 characters as well as special characters such as "-" and "()" in my column, how can I account for that without a lot of manual changes?
This comment was minimized by the moderator on the site
This worked great!!! One question... my formulas didn't transfer to each sheet correctly. What do I need to do differently to transfer the formulas?
Thank you!!!!!
This comment was minimized by the moderator on the site
Nice code, but it just copied everything to the new tables, named correctly though. So, the data filtering did not work at all, just copy paste.
This comment was minimized by the moderator on the site
When I run this using a small amount of data like the example it works. I'm trying to use this on a database with 400k + rows of data. When I run the macro, a second tab is created with just the header row and no data.
This comment was minimized by the moderator on the site
Hello, Ryan,

As you mentioned, the code works well for small data ranges, if there are lots of data, the code will not work properly.
In such situations, I recommend using the "Split Data" feature offered by Kutools for Excel. This powerful feature can greatly assist you in managing large amounts of data. To take advantage of this feature, you can download and install Kutools for Excel, which is available for a 30-day free trial.

Please have a try, thank you!
This comment was minimized by the moderator on the site
I've come across many solutions in VBA message boards for parsing data into worksheets or columns based upon filtering a particular column, but they all require a bit of tinkering and customization. What makes this so brilliant is that it is dynamic, user-friendly even for beginners (which gives it shareable utility), and copy/paste ready.

You rock.
This comment was minimized by the moderator on the site
Hi, Dane,
Thanks for your comment, glad this can help you! Have a good day!
This comment was minimized by the moderator on the site
When I try to split data from a different sheet, it copies and pastes the entire sheet into one sheet instead of multiple sheets. Could this be because the naming convention of the sheet I'm trying to split is similar to another sheet?
This comment was minimized by the moderator on the site
Hello, Giancarlo,

If the data in the column is same with a sheet name in the workbook, the sheet with the same name will be kept, other data will be split into separate sheet.
Thanks for your comment.
There are no comments posted here yet
Load More
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations