Salt la conținutul principal

Sfaturi Excel: Împărțiți datele în mai multe foi de lucru / registre de lucru pe baza valorii coloanei

Când gestionați seturi de date mari în Excel, poate fi foarte benefic să împărțiți datele în mai multe foi de lucru pe baza unor valori specifice coloanei. Această metodă îmbunătățește nu numai organizarea datelor, ci și lizibilitatea și facilitează analiza mai ușoară a datelor.

Să presupunem că aveți o înregistrare mare de vânzări care conține mai multe intrări, cum ar fi numele produsului, cantitatea vândută din primul trimestru. Scopul este de a împărți aceste date în foi de lucru separate pe baza fiecărui nume de produs, astfel încât performanța individuală a vânzărilor să poată fi analizată separat.

Împărțiți datele în mai multe foi de lucru pe baza valorii coloanei

Împărțiți datele în mai multe registre de lucru pe baza valorii coloanei cu cod VBA


Împărțiți datele în mai multe foi de lucru pe baza valorii coloanei

În mod normal, puteți sorta mai întâi lista de date, apoi le puteți copia și lipi una câte una în alte foi de lucru noi. Dar acest lucru va avea nevoie de răbdare pentru a copia și lipi în mod repetat. În această secțiune, vom introduce două metode simple pentru a aborda eficient această sarcină în Excel, economisind timp și reducând potențialul de erori.

Împărțiți datele în mai multe foi de lucru pe baza valorii coloanei cu cod VBA

1. Țineți apăsat butonul ALT + F11 tastele pentru a deschide Microsoft Visual Basic pentru aplicații fereastră.

2. clic Insera > Moduleși lipiți următorul cod în fereastra modulului.

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. Apoi, apăsați F5 tasta pentru a rula codul și apare o casetă promptă pentru a vă aminti că selectați rândul antetului, apoi faceți clic pe OK. Vedeți captura de ecran:

4. În a doua casetă promptă, selectați datele coloanei pe care doriți să le împărțiți, apoi faceți clic OK. Vedeți captura de ecran:

5. Toate datele din foaia de lucru activă sunt împărțite în mai multe foi de lucru pe baza valorilor coloanei. Foile de lucru rezultate sunt denumite în funcție de valorile din celulele împărțite și sunt plasate la sfârșitul registrului de lucru. Vedeți captura de ecran:

 

Împărțiți datele în mai multe foi de lucru pe baza valorii coloanei cu Kutools pentru Excel

Kutools pentru Excel aduce caracteristici inteligente - Împărțiți datele direct în mediul dumneavoastră Excel. Împărțirea datelor în mai multe foi de lucru nu mai este o provocare. Instrumentul nostru intuitiv împarte automat setul de date în funcție de valoarea de coloană aleasă sau de numărul de rânduri, asigurându-se că fiecare informație este exact acolo unde aveți nevoie. Spuneți la revedere sarcinii obositoare de a vă organiza manual foile de calcul și adoptați o modalitate mai rapidă și fără erori de a vă gestiona datele.

notițe: Pentru a aplica acest lucru Împărțiți datele, în primul rând, ar trebui să descărcați fișierul Kutools pentru Excel, apoi aplicați caracteristica rapid și ușor.

După instalare Kutools pentru Excel, selectați intervalul de date, apoi faceți clic Kutools Plus > Împărțiți datele pentru a deschide Împărțiți datele în mai multe foi de lucru căsuță de dialog.

  1. Selectați Coloană specifică opțiune în Split pe baza secțiunea și alegeți valoarea coloanei pe care doriți să împărțiți datele în funcție de lista derulantă.
  2. Dacă datele dvs. au antete și doriți să le inserați în fiecare nouă foaie de lucru împărțită, vă rugăm să verificați Datele mele au anteturi opțiune. (Puteți specifica numărul de rânduri de antet pe baza datelor dvs. De exemplu, dacă datele dvs. conțin două anteturi, introduceți 2.)
  3. Apoi puteți specifica numele foilor de lucru împărțite, sub Numele noilor foi de lucru secțiunea, specificați regula numelor foilor de lucru din lista derulantă Reguli, puteți adăuga Prefix or Sufix și pentru numele foilor.
  4. Apasă pe OK buton. Vedeți captura de ecran:

Acum, datele din foaia de lucru sunt împărțite în mai multe foi de lucru într-un nou registru de lucru.


Împărțiți datele în mai multe registre de lucru pe baza valorii coloanei cu cod VBA

Ocazional, mai degrabă decât împărțirea datelor în mai multe foi de lucru, poate fi mai benefic să împărțiți datele în registre de lucru separate, pe baza unei coloane cheie. Iată un ghid pas cu pas despre cum să utilizați codul VBA pentru a automatiza procesul de împărțire a datelor în mai multe registre de lucru pe baza unei anumite valori de coloană.

1. Țineți apăsat butonul ALT + F11 tastele pentru a deschide Microsoft Visual Basic pentru aplicații fereastră.

2. clic Insera > Moduleși lipiți următorul cod în Fereastra modulului.

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
notițe: În codul de mai sus, ar trebui să schimbați calea fișierului la propria dvs. unde vor salva registrele de lucru împărțite în acest script: savePath = „C:\Users\AddinsVM001\Desktop\fișiere multiple\”.

3. Apoi, apăsați F5 tasta pentru a rula codul și apare o casetă promptă pentru a vă aminti că selectați rândul antetului, apoi faceți clic pe OK. Vedeți captura de ecran:

4. În a doua casetă promptă, selectați datele coloanei pe care doriți să le împărțiți, apoi faceți clic OK. Vedeți captura de ecran:

5. După împărțire, toate datele din foaia de lucru activă sunt împărțite în mai multe registre de lucru pe baza valorilor coloanei. Toate registrele de lucru împărțite sunt salvate în folderul pe care l-ați specificat. Vedeți captura de ecran:

Articole pe aceeaşi temă:

  • Împărțiți datele în mai multe foi de lucru după numărul de rânduri
  • Împărțirea eficientă a unui interval mare de date în mai multe foi de lucru Excel bazate pe un anumit număr de rânduri poate simplifica gestionarea datelor. De exemplu, împărțirea unui set de date la fiecare 5 rânduri în mai multe foi îl poate face mai ușor de gestionat și organizat. Acest ghid oferă două metode practice pentru a realiza această sarcină rapid și ușor.
  • Îmbinați două sau mai multe tabele într-unul singur pe baza coloanelor cheie
  • Presupunând că aveți trei tabele într-un registru de lucru, acum, doriți să îmbinați aceste tabele într-un singur tabel pe baza coloanelor cheie corespunzătoare pentru a obține rezultatul așa cum este prezentat mai jos. Aceasta poate fi o sarcină supărătoare pentru majoritatea dintre noi, dar, vă rugăm să nu vă faceți griji, acest articol, voi introduce câteva metode pentru rezolvarea acestei probleme.
  • Împărțiți șirurile de text după delimitator în mai multe rânduri
  • În mod normal, puteți folosi funcția Text în coloană pentru a împărți conținutul celulei în mai multe coloane printr-un anumit delimitator, cum ar fi virgulă, punct, punct și virgulă, bară oblică etc. Dar, uneori, poate fi necesar să împărțiți conținutul celulei delimitate în mai multe rânduri. și repetați datele din alte coloane așa cum se arată mai jos. Aveți modalități bune de a face față acestei sarcini în Excel? Acest tutorial va introduce câteva metode eficiente pentru a finaliza această lucrare în Excel.
  • Împărțiți conținutul celulelor cu mai multe linii în rânduri/coloane separate
  • Presupunând că aveți conținut de celule cu mai multe linii, care este separat de Alt + Enter, iar acum trebuie să împărțiți conținutul cu mai multe linii în rânduri sau coloane separate, ce puteți face? În acest articol, veți învăța cum să împărțiți rapid conținutul celulelor cu mai multe linii în rânduri sau coloane separate.

Cele mai bune instrumente de productivitate de birou

🤖 Kutools AI Aide: Revoluționați analiza datelor pe baza: Execuție inteligentă   |  Generați codul  |  Creați formule personalizate  |  Analizați datele și generați diagrame  |  Invocați funcțiile Kutools...
Caracteristici populare: Găsiți, evidențiați sau identificați duplicatele   |  Ștergeți rândurile goale   |  Combinați coloane sau celule fără a pierde date   |   Rundă fără Formula ...
Super căutare: VLookup cu mai multe criterii    VLookup cu valori multiple  |   VLookup pe mai multe foi   |   Căutare fuzzy ....
Listă derulantă avansată: Creați rapid o listă derulantă   |  Listă drop-down dependentă   |  Listă derulantă cu selectare multiplă ....
Manager de coloane: Adăugați un număr specific de coloane  |  Mutați coloanele  |  Comutați starea vizibilității coloanelor ascunse  |  Comparați intervale și coloane ...
Caracteristici prezentate: Focus pe grilă   |  Vedere de proiectare   |   Big Formula Bar    Manager registru de lucru și foi   |  Biblioteca de resurse (Text automat)   |  Data Picker   |  Combinați foi de lucru   |  Criptare/Decriptare celule    Trimiteți e-mailuri după listă   |  Super Filtru   |   Filtru special (filtrează bold/italic/barat...) ...
Top 15 seturi de instrumente12 Text Instrumente (Adăuga text, Eliminați caractere,...)   |   50+ Diagramă Tipuri de (Gantt Chart,...)   |   40+ Practic Formule (Calculați vârsta pe baza zilei de naștere,...)   |   19 inserare Instrumente (Introduceți codul QR, Inserați imaginea din cale,...)   |   12 Convertire Instrumente (Numere la cuvinte, conversie valutara,...)   |   7 Merge & Split Instrumente (Rânduri combinate avansate, Celule divizate,...)   |   ... și altele

Îmbunătățiți-vă abilitățile Excel cu Kutools pentru Excel și experimentați eficiența ca niciodată. Kutools pentru Excel oferă peste 300 de funcții avansate pentru a crește productivitatea și a economisi timp.  Faceți clic aici pentru a obține funcția de care aveți cea mai mare nevoie...

Descriere


Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
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