Preskoči na glavno vsebino

Nasveti za Excel: Razdelite podatke v več delovnih listov / delovnih zvezkov na podlagi vrednosti stolpca

Pri upravljanju velikih naborov podatkov v Excelu je lahko zelo koristno, če podatke razdelite na več delovnih listov na podlagi določenih vrednosti stolpcev. Ta metoda ne izboljša samo organizacije podatkov, temveč tudi izboljša berljivost in olajša analizo podatkov.

Recimo, da imate velik prodajni zapis, ki vsebuje več vnosov, kot je ime izdelka, prodana količina v prvem četrtletju. Cilj je razdeliti te podatke v ločene delovne liste glede na vsako ime izdelka, tako da je mogoče posamezno prodajno uspešnost analizirati ločeno.

Podatke razdelite na več delovnih listov glede na vrednost stolpca

Razdelite podatke v več delovnih zvezkov glede na vrednost stolpca s kodo VBA


Podatke razdelite na več delovnih listov glede na vrednost stolpca

Običajno lahko najprej razvrstite seznam podatkov, nato pa jih enega za drugim kopirate in prilepite v druge nove delovne liste. Toda to bo zahtevalo vašo potrpežljivost za večkratno kopiranje in lepljenje. V tem razdelku bomo predstavili dve enostavni metodi za učinkovito reševanje te naloge v Excelu, s čimer boste prihranili čas in zmanjšali možnost napak.

Podatke razdelite na več delovnih listov glede na vrednost stolpca s kodo VBA

1. Držite tipko ALT + F11 tipke za odpiranje Microsoft Visual Basic za aplikacije okno.

2. klik Vstavi > Moduliin prilepite naslednjo kodo v okno modula.

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. Nato pritisnite F5 tipko za zagon kode in prikaže se okno s pozivom, ki vas opomni, da izberete vrstico glave in nato kliknete OK. Oglejte si posnetek zaslona:

4. V drugem pozivnem polju izberite podatke stolpca, na podlagi katerih želite razdeliti, nato kliknite OK. Oglejte si posnetek zaslona:

5. Vsi podatki na aktivnem delovnem listu so razdeljeni na več delovnih listov glede na vrednosti stolpcev. Dobljeni delovni listi so poimenovani glede na vrednosti v razdeljenih celicah in so postavljeni na konec delovnega zvezka. Oglejte si posnetek zaslona:

 

Razdelite podatke na več delovnih listov glede na vrednost stolpca s programom Kutools for Excel

Kutools za Excel prinaša pametno funkcijo – Razdeljeni podatki naravnost v vaše Excelovo okolje. Razdelitev podatkov na več delovnih listov ni več izziv. Naše intuitivno orodje samodejno razdeli vaš nabor podatkov glede na izbrano vrednost stolpca ali število vrstic, s čimer zagotovi, da je vsak podatek točno tam, kjer ga potrebujete. Poslovite se od dolgočasne naloge ročnega organiziranja preglednic in sprejmite hitrejši način upravljanja podatkov brez napak.

Opombe: Če želite uporabiti to Razdeljeni podatki, najprej bi morali prenesti Kutools za Excelin nato funkcijo hitro in enostavno uporabite.

Po namestitvi Kutools za Excel, izberite obseg podatkov in kliknite Kutools Plus > Razdeljeni podatki da odprete Podatke razdelite na več delovnih listov pogovorno okno.

  1. Izberite Poseben stolpec možnost v Razdeljeno na podlagi in na spustnem seznamu izberite vrednost stolpca, na podlagi katere želite razdeliti podatke.
  2. Če imajo vaši podatki glave in jih želite vstaviti v vsak nov razdeljeni delovni list, preverite Moji podatki imajo glave možnost. (Na podlagi vaših podatkov lahko določite število vrstic glave. Če vaši podatki na primer vsebujejo dve glavi, vnesite 2.)
  3. Nato lahko pod imenom deljeni delovni list podate imena Ime novega delovnega lista razdelku določite pravilo za imena delovnih listov s spustnega seznama Pravila, lahko dodate Prefiks or pripona tudi za imena listov.
  4. Kliknite OK . Oglejte si posnetek zaslona:

Zdaj so podatki na delovnem listu razdeljeni na več delovnih listov v novem delovnem zvezku.


Razdelite podatke v več delovnih zvezkov glede na vrednost stolpca s kodo VBA

Občasno je morda bolj koristno razdeliti podatke v ločene delovne zvezke, ki temeljijo na ključnem stolpcu, namesto da bi podatke razdelili na več delovnih listov. Tukaj je vodnik po korakih za uporabo kode VBA za avtomatizacijo postopka razdelitve podatkov v več delovnih zvezkov na podlagi določene vrednosti stolpca.

1. Držite tipko ALT + F11 tipke za odpiranje Microsoft Visual Basic za aplikacije okno.

2. klik Vstavi > Moduliin prilepite naslednjo kodo v Okno modula.

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
Opombe: V zgornji kodi bi morali spremeniti pot datoteke v svojo lastno, kamor bodo shranjeni razdeljeni delovni zvezki v tem skriptu: savePath = "C:\Users\AddinsVM001\Desktop\več datotek\".

3. Nato pritisnite F5 tipko za zagon kode in prikaže se okno s pozivom, ki vas opomni, da izberete vrstico glave in nato kliknete OK. Oglejte si posnetek zaslona:

4. V drugem pozivnem polju izberite podatke stolpca, na podlagi katerih želite razdeliti, nato kliknite OK. Oglejte si posnetek zaslona:

5. Po razdelitvi so vsi podatki na aktivnem delovnem listu razdeljeni v več delovnih zvezkov na podlagi vrednosti stolpcev. Vsi razdeljeni delovni zvezki so shranjeni v mapo, ki ste jo določili. Oglejte si posnetek zaslona:

Sorodni članki:

  • Razdelite podatke na več delovnih listov po številu vrstic
  • Učinkovita razdelitev velikega obsega podatkov na več Excelovih delovnih listov na podlagi določenega števila vrstic lahko poenostavi upravljanje podatkov. Če na primer razdelite nabor podatkov vsakih 5 vrstic na več listov, ga lahko naredite bolj obvladljivega in organiziranega. Ta priročnik ponuja dve praktični metodi za hitro in enostavno izvedbo te naloge.
  • Združite dve ali več tabel v eno na podlagi ključnih stolpcev
  • Recimo, da imate v delovnem zvezku tri tabele, jih želite združiti v eno tabelo na podlagi ustreznih stolpcev s ključi, da dobite rezultat, kot je prikazano spodaj. To je lahko za večino od nas težavna naloga, toda, ne skrbite, v tem članku bom predstavil nekaj metod za reševanje te težave.
  • Razdeli besedilne nize z ločilom v več vrstic
  • Običajno lahko s funkcijo Besedilo v stolpec razdelite vsebino celice v več stolpcev z določenim ločilom, kot je vejica, pika, podpičje, poševnica itd. Toda včasih boste morda morali vsebino razmejene celice razdeliti v več vrstic in ponovite podatke iz drugih stolpcev, kot je prikazano na spodnjem posnetku zaslona. Ali imate kakšen dober način za reševanje te naloge v Excelu? Ta vadnica bo predstavila nekaj učinkovitih metod za dokončanje tega dela v Excelu.
  • Razdeli večvrstično vsebino celic v ločene vrstice/stolpce
  • Kaj lahko storite, če imate vsebino večvrstične celice, ki je ločena z Alt + Enter, in zdaj morate vsebino več vrstic razdeliti na ločene vrstice ali stolpce? V tej članku se boste naučili, kako hitro razdeliti vsebino večvrstične celice v ločene vrstice ali stolpce.

Najboljša pisarniška orodja za produktivnost

🤖 Kutools AI Aide: Revolucionirajte analizo podatkov na podlagi: Inteligentna izvedba   |  Ustvari kodo  |  Ustvarite formule po meri  |  Analizirajte podatke in ustvarite grafikone  |  Prikličite funkcije Kutools...
Priljubljene funkcije: Poiščite, označite ali identificirajte dvojnike   |  Izbriši prazne vrstice   |  Združite stolpce ali celice brez izgube podatkov   |   Krog brez formule ...
Super iskanje: Več kriterijev VLookup    Multiple Value VLookup  |   VLookup na več listih   |   Nejasno iskanje ....
Napredni spustni seznam: Hitro ustvarite spustni seznam   |  Odvisni spustni seznam   |  Večkrat izberite spustni seznam ....
Upravitelj stolpcev: Dodajte določeno število stolpcev  |  Premakni stolpce  |  Preklop stanja vidnosti skritih stolpcev  |  Primerjaj obsege in stolpce ...
Predstavljene funkcije: Mrežni fokus   |  Pogled oblikovanja   |   Velika vrstica formule    Upravitelj delovnih zvezkov in listov   |  Knjižnica virov (Samodejno besedilo)   |  Izbirnik datuma   |  Združite delovne liste   |  Šifriranje/dešifriranje celic    Pošljite e-pošto po seznamu   |  Super filter   |   Poseben filter (filter krepko/ležeče/prečrtano ...) ...
15 najboljših kompletov orodij12 Besedilo Orodja (dodajanje besedila, Odstrani znake,...)   |   50 + Graf Vrste (Gantt Chart,...)   |   40+ Praktično Formule (Izračunajte starost glede na rojstni dan,...)   |   19 vstavljanje Orodja (Vstavite kodo QR, Vstavi sliko s poti,...)   |   12 Pretvorba Orodja (Številke v besede, Pretvorba valut,...)   |   7 Spoji in razdeli Orodja (Napredne kombinirane vrstice, Razdeljene celice,...)   |   ... in več

Napolnite svoje Excelove spretnosti s Kutools za Excel in izkusite učinkovitost kot še nikoli prej. Kutools za Excel ponuja več kot 300 naprednih funkcij za povečanje produktivnosti in prihranek časa.  Kliknite tukaj, če želite pridobiti funkcijo, ki jo najbolj potrebujete...

Opis


Kartica Office prinaša vmesnik z zavihki v Office in poenostavi vaše delo

  • Omogočite urejanje in branje z zavihki v Wordu, Excelu, PowerPointu, Publisher, Access, Visio in Project.
  • Odprite in ustvarite več dokumentov v novih zavihkih istega okna in ne v novih oknih.
  • Poveča vašo produktivnost za 50%in vsak dan zmanjša na stotine klikov miške za vas!
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