Ga naar hoofdinhoud

Excel-tips: Splits gegevens op in meerdere werkbladen/werkmappen op basis van de kolomwaarde

Auteur: Xiaoyang Laatst gewijzigd: 2024-04-26

Bij het beheren van grote gegevenssets in Excel kan het zeer nuttig zijn om gegevens op te splitsen in meerdere werkbladen op basis van specifieke kolomwaarden. Deze methode verbetert niet alleen de organisatie van gegevens, maar verbetert ook de leesbaarheid en vergemakkelijkt een eenvoudigere gegevensanalyse.

Stel dat u een groot verkooprecord heeft met meerdere vermeldingen, zoals de productnaam en de verkochte hoeveelheid van het eerste kwartaal. Het doel is om deze gegevens op te splitsen in afzonderlijke werkbladen op basis van elke productnaam, zodat de individuele verkoopprestaties afzonderlijk kunnen worden geanalyseerd.

Gegevens opsplitsen in meerdere werkbladen op basis van de kolomwaarde

Splits gegevens in meerdere werkmappen op basis van kolomwaarde met VBA-code


Gegevens opsplitsen in meerdere werkbladen op basis van de kolomwaarde

Normaal gesproken kunt u de gegevenslijst eerst sorteren en deze vervolgens één voor één kopiëren en in andere nieuwe werkbladen plakken. Maar dit vereist uw geduld om herhaaldelijk te kopiëren en plakken. In dit gedeelte introduceren we twee eenvoudige methoden om deze taak efficiënt aan te pakken in Excel, waardoor u tijd bespaart en de kans op fouten wordt verkleind.

Splits gegevens op in meerdere werkbladen op basis van kolomwaarde met VBA-code

1. Houd de toets ingedrukt ALT + F11 toetsen om de te openen Microsoft Visual Basic voor toepassingen venster.

2. klikken Invoegen > Moduleen plak de volgende code in het modulevenster.

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. Druk vervolgens op F5 toets om de code uit te voeren, en er verschijnt een promptvenster om u eraan te herinneren de koprij te selecteren en vervolgens te klikken OK. Zie screenshot:

4. Selecteer in het tweede promptvenster de kolomgegevens waarop u wilt splitsen en klik vervolgens op OK. Zie screenshot:

5. Alle gegevens in het actieve werkblad zijn verdeeld in meerdere werkbladen op basis van de kolomwaarden. De resulterende werkbladen krijgen een naam op basis van de waarden in de gesplitste cellen en worden aan het einde van de werkmap geplaatst. Zie schermafbeelding:

 

Splits gegevens op in meerdere werkbladen op basis van kolomwaarde met Kutools voor Excel

Kutools for Excel brengt slimme functie – Gegevens splitsen rechtstreeks in uw Excel-omgeving. Gegevens opsplitsen in meerdere werkbladen is niet langer een uitdaging. Onze intuïtieve tool verdeelt uw dataset automatisch op basis van de gekozen kolomwaarde of het aantal rijen, zodat elk stukje informatie precies daar is waar u het nodig heeft. Zeg vaarwel tegen de vervelende taak van het handmatig organiseren van uw spreadsheets en omarm een ​​snellere, foutloze manier om uw gegevens te beheren.

Note: Om dit toe te passen Gegevens splitsen, ten eerste moet u het Kutools for Excelen pas de functie vervolgens snel en gemakkelijk toe.

Na het installeren van Kutools for Excel, selecteer het gegevensbereik en klik vervolgens op Koetools Plus > Gegevens splitsen om de te openen Gegevens opsplitsen in meerdere werkbladen dialoog venster.

  1. kies Specifieke kolom optie in het Splitsen op basis van sectie en kies de kolomwaarde waarvan u de gegevens wilt splitsen op basis van de vervolgkeuzelijst.
  2. Als uw gegevens kopteksten hebben en u deze in elk nieuw gesplitst werkblad wilt invoegen, vinkt u dit aan Mijn gegevens hebben kopteksten keuze. (U kunt het aantal koptekstrijen opgeven op basis van uw gegevens. Als uw gegevens bijvoorbeeld twee kopteksten bevatten, typt u 2.)
  3. Vervolgens kunt u de namen van het gesplitste werkblad specificeren onder de Nieuwe werkbladnaam sectie, specificeer de regel voor werkbladnamen in de vervolgkeuzelijst Regels, u kunt de Voorvoegsel or Toevoeging ook voor de bladnamen.
  4. Klik op de OK knop. Zie screenshot:

Nu worden de gegevens in het werkblad opgesplitst in meerdere werkbladen in een nieuwe werkmap.


Splits gegevens in meerdere werkmappen op basis van kolomwaarde met VBA-code

Soms kan het, in plaats van gegevens in meerdere werkbladen te verdelen, voordeliger zijn om de gegevens in afzonderlijke werkmappen te splitsen op basis van een sleutelkolom. Hier vindt u een stapsgewijze handleiding over het gebruik van VBA-code om het proces van het splitsen van gegevens in meerdere werkmappen te automatiseren op basis van een specifieke kolomwaarde.

1. Houd de toets ingedrukt ALT + F11 toetsen om de te openen Microsoft Visual Basic voor toepassingen venster.

2. klikken Invoegen > Moduleen plak de volgende code in het Module Venster.

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
Note: In de bovenstaande code moet u het bestandspad naar uw eigen pad wijzigen, waar de gesplitste werkmappen in dit script worden opgeslagen: savePath = "C:\Users\AddinsVM001\Bureaublad\meerdere bestanden\".

3. Druk vervolgens op F5 toets om de code uit te voeren, en er verschijnt een promptvenster om u eraan te herinneren de koprij te selecteren en vervolgens te klikken OK. Zie screenshot:

4. Selecteer in het tweede promptvenster de kolomgegevens waarop u wilt splitsen en klik vervolgens op OK. Zie screenshot:

5. Na het splitsen worden alle gegevens in het actieve werkblad verdeeld in meerdere werkmappen op basis van de kolomwaarden. Alle gesplitste werkmappen worden opgeslagen in de map die u hebt opgegeven. Zie schermafbeelding:

Gerelateerde artikelen:

  • Splits gegevens in meerdere werkbladen door het aantal rijen
  • Door een groot gegevensbereik efficiënt te verdelen in meerdere Excel-werkbladen op basis van een specifiek aantal rijen, kan het gegevensbeheer worden gestroomlijnd. Als u een gegevensset bijvoorbeeld elke vijf rijen in meerdere werkbladen opsplitst, kan deze beter beheersbaar en georganiseerd worden. Deze handleiding biedt twee praktische methoden om deze taak snel en gemakkelijk uit te voeren.
  • Voeg twee of meer tabellen samen tot één op basis van sleutelkolommen
  • Stel dat u drie tabellen in een werkmap heeft, nu wilt u deze tabellen samenvoegen tot één tabel op basis van de overeenkomstige sleutelkolommen om het resultaat te krijgen zoals onderstaand screenshot. Dit kan voor de meesten van ons een lastige taak zijn, maar maak je geen zorgen, in dit artikel zal ik enkele methoden introduceren om dit probleem op te lossen.
  • Splits tekstreeksen door scheidingsteken in meerdere rijen
  • Normaal gesproken kunt u de functie Tekst naar kolom gebruiken om de celinhoud op te splitsen in meerdere kolommen met een specifiek scheidingsteken, zoals een komma, punt, puntkomma, schuine streep, enz. Maar soms moet u de gescheiden celinhoud opsplitsen in meerdere rijen en herhaal de gegevens uit andere kolommen zoals onderstaand screenshot getoond. Heeft u goede manieren om met deze taak in Excel om te gaan? Deze zelfstudie introduceert enkele effectieve methoden om deze taak in Excel te voltooien.
  • Splits de celinhoud van meerdere regels in gescheiden rijen/kolommen
  • Stel dat u celinhoud met meerdere regels hebt die wordt gescheiden door Alt + Enter, en nu moet u de inhoud van meerdere regels splitsen in gescheiden rijen of kolommen, wat kunt u dan doen? In dit artikel leert u hoe u snel celinhoud van meerdere regels kunt splitsen in gescheiden rijen of kolommen.

Beste Office-productiviteitstools

🤖 Kutools AI-assistent: Een revolutie teweegbrengen in de data-analyse op basis van: Intelligente uitvoering   |  Genereer code  |  Aangepaste formules maken  |  Analyseer gegevens en genereer grafieken  |  Roep Kutools-functies aan...
Populaire functies: Zoek, markeer of identificeer duplicaten   |  Verwijder lege rijen   |  Combineer kolommen of cellen zonder gegevens te verliezen   |   Ronde zonder formule ...
Super opzoeken: Meerdere criteria VLookup    VLookup met meerdere waarden  |   VOpzoeken over meerdere bladen   |   Fuzzy opzoeken ....
Geavanceerde vervolgkeuzelijst: Maak snel een vervolgkeuzelijst   |  Afhankelijke vervolgkeuzelijst   |  Multi-select vervolgkeuzelijst ....
Kolom Beheerder: Voeg een specifiek aantal kolommen toe  |  Kolommen verplaatsen  |  Schakel de zichtbaarheidsstatus van verborgen kolommen in  |  Vergelijk bereiken en kolommen ...
Uitgelichte functies: Raster focus   |  Ontwerpweergave   |   Grote formulebalk    Werkmap- en bladbeheer   |  resource Library (Auto-tekst)   |  Datumkiezer   |  Combineer werkbladen   |  Cellen coderen/decoderen    Stuur e-mails per lijst   |  Super filter   |   Speciaal filter (filter vet/cursief/doorhalen...) ...
Top 15 gereedschapsets12 Tekst Tools (toe te voegen tekst, Tekens verwijderen, ...)   |   50+ tabel Types (Gantt Chart, ...)   |   40+ Praktisch Formules (Bereken leeftijd op basis van verjaardag, ...)   |   19 Invoeging Tools (QR-code invoegen, Afbeelding invoegen vanaf pad, ...)   |   12 Camper ombouw Tools (Getallen naar woorden, Currency Conversion, ...)   |   7 Samenvoegen en splitsen Tools (Geavanceerd Combineer rijen, Gespleten cellen, ...)   |   ... en meer

Geef uw Excel-vaardigheden een boost met Kutools voor Excel en ervaar efficiëntie als nooit tevoren. Kutools voor Excel biedt meer dan 300 geavanceerde functies om de productiviteit te verhogen en tijd te besparen.  Klik hier om de functie te krijgen die u het meest nodig heeft...

Omschrijving


Office-tabblad Brengt een interface met tabbladen naar Office en maakt uw werk veel gemakkelijker

  • Schakel bewerken en lezen met tabbladen in Word, Excel, PowerPoint in, Publisher, Access, Visio en Project.
  • Open en maak meerdere documenten in nieuwe tabbladen van hetzelfde venster in plaats van in nieuwe vensters.
  • Verhoogt uw productiviteit met 50% en vermindert honderden muisklikken voor u elke dag!
Comments (314)
Rated 5 out of 5 · 2 ratings
This comment was minimized by the moderator on the site
Hi,
is it possible to use a VBA code to split data into multiple files - not just tabs?
This comment was minimized by the moderator on the site
Hello, Emily,
To split data into multiple files, please apply the code in the second header of this article.
https://www.extendoffice.com/documents/excel/1174-excel-split-data-into-multiple-worksheets-based-on-column.html#a2
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!
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