Vai al contenuto principale

Suggerimenti per Excel: suddividi i dati in più fogli di lavoro/cartelle di lavoro in base al valore della colonna

Autore: Xiaoyang Ultima modifica: 2024-04-26

Quando si gestiscono set di dati di grandi dimensioni in Excel, può essere molto utile suddividere i dati in più fogli di lavoro in base a valori di colonna specifici. Questo metodo migliora non solo l'organizzazione dei dati, ma migliora anche la leggibilità e facilita l'analisi dei dati.

Supponiamo di avere un record di vendite di grandi dimensioni contenente più voci come il nome del prodotto e la quantità venduta nel primo trimestre. L'obiettivo è suddividere questi dati in fogli di lavoro separati in base al nome di ciascun prodotto in modo che le prestazioni di vendita individuali possano essere analizzate separatamente.

Suddividi i dati in più fogli di lavoro in base al valore della colonna

Suddividi i dati in più cartelle di lavoro in base al valore della colonna con codice VBA


Suddividi i dati in più fogli di lavoro in base al valore della colonna

Normalmente, è possibile prima ordinare l'elenco dei dati, quindi copiarli e incollarli uno per uno in altri nuovi fogli di lavoro. Ma questo richiederà la tua pazienza per copiare e incollare ripetutamente. In questa sezione, introdurremo due metodi semplici per affrontare in modo efficiente questa attività in Excel, risparmiando tempo e riducendo il rischio di errori.

Dividi i dati in più fogli di lavoro in base al valore della colonna con codice VBA

1. Tenere premuto il tasto ALT + F11 chiavi per aprire il Microsoft Visual Basic, Applications Edition finestra.

2. Clic inserire > Modulie incolla il codice seguente nella finestra del modulo.

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. Quindi, premere F5 per eseguire il codice e viene visualizzata una finestra di messaggio per ricordarti di selezionare la riga di intestazione, quindi fare clic OK. Vedi screenshot:

4. Nella seconda finestra di messaggio, seleziona i dati della colonna su cui vuoi dividere in base, quindi fai clic OK. Vedi screenshot:

5. Tutti i dati nel foglio di lavoro attivo sono divisi in più fogli di lavoro in base ai valori delle colonne. I fogli di lavoro risultanti vengono denominati in base ai valori nelle celle divise e vengono posizionati alla fine della cartella di lavoro. Vedi schermata:

 

Dividi i dati in più fogli di lavoro in base al valore della colonna con Kutools per Excel

Kutools for Excel porta funzionalità intelligenti - Split Data direttamente nel tuo ambiente Excel. Suddividere i dati in più fogli di lavoro non è più una sfida. Il nostro strumento intuitivo divide automaticamente il tuo set di dati in base al valore della colonna scelto o al conteggio delle righe, assicurando che ogni informazione sia esattamente dove ti serve. Dì addio al noioso compito di organizzare manualmente i tuoi fogli di calcolo e adotta un modo più veloce e privo di errori per gestire i tuoi dati.

Note:: Per applicare questo Split Data, in primo luogo, dovresti scaricare il file Kutools for Excele quindi applica la funzione in modo rapido e semplice.

Dopo l'installazione Kutools for Excel, selezionare l'intervallo di dati e quindi fare clic su Kutools Plus > Split Data per aprire il Suddividi i dati in più fogli di lavoro la finestra di dialogo.

  1. Seleziona Colonna specifica opzione nel Dividi in base a sezione e scegli il valore della colonna in base alla quale desideri suddividere i dati dall'elenco a discesa.
  2. Se i tuoi dati hanno intestazioni e desideri inserirle in ogni nuovo foglio di lavoro diviso, controlla I miei dati hanno intestazioni opzione. (Puoi specificare il numero di righe di intestazione in base ai tuoi dati. Ad esempio, se i tuoi dati contengono due intestazioni, digita 2.)
  3. Quindi puoi specificare i nomi dei fogli di lavoro divisi, sotto il file Nuovo nome dei fogli di lavoro sezione, specifica la regola dei nomi dei fogli di lavoro dall'elenco a discesa Regole, puoi aggiungere il file Prefisso or Suffisso anche per i nomi dei fogli.
  4. Clicca su OK pulsante. Vedi screenshot:

Ora i dati nel foglio di lavoro sono suddivisi in più fogli di lavoro in una nuova cartella di lavoro.


Suddividi i dati in più cartelle di lavoro in base al valore della colonna con codice VBA

Talvolta, anziché dividere i dati in più fogli di lavoro, può essere più utile suddividere i dati in cartelle di lavoro separate in base a una colonna chiave. Ecco una guida passo passo su come utilizzare il codice VBA per automatizzare il processo di suddivisione dei dati in più cartelle di lavoro in base a un valore di colonna specifico.

1. Tenere premuto il tasto ALT + F11 chiavi per aprire il Microsoft Visual Basic, Applications Edition finestra.

2. Clic inserire > Modulie incolla il codice seguente nel file Finestra del modulo.

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:: Nel codice sopra, dovresti cambiare il percorso del file con il tuo dove salverai le cartelle di lavoro divise in questo script: savePath = "C:\Users\AddinsVM001\Desktop\file multipli\".

3. Quindi, premere F5 per eseguire il codice e viene visualizzata una finestra di messaggio per ricordarti di selezionare la riga di intestazione, quindi fare clic OK. Vedi screenshot:

4. Nella seconda finestra di messaggio, seleziona i dati della colonna su cui vuoi dividere in base, quindi fai clic OK. Vedi screenshot:

5. Dopo la divisione, tutti i dati nel foglio di lavoro attivo vengono divisi in più cartelle di lavoro in base ai valori delle colonne. Tutte le cartelle di lavoro divise vengono salvate nella cartella specificata. Vedi schermata:

Articoli Correlati:

  • Dividi i dati in più fogli di lavoro per numero di righe
  • La divisione efficiente di un ampio intervallo di dati in più fogli di lavoro Excel in base a un conteggio di righe specifico può semplificare la gestione dei dati. Ad esempio, dividere un set di dati ogni 5 righe in più fogli può renderlo più gestibile e organizzato. Questa guida offre due metodi pratici per eseguire questa attività in modo rapido e semplice.
  • Unisci due o più tabelle in una in base alle colonne chiave
  • Supponendo che tu abbia tre tabelle in una cartella di lavoro, ora, vuoi unire queste tabelle in una tabella in base alle colonne chiave corrispondenti per ottenere il risultato come mostrato nell'immagine sottostante. Questo potrebbe essere un compito problematico per la maggior parte di noi, ma, per favore, non preoccuparti, in questo articolo introdurrò alcuni metodi per risolvere questo problema.
  • Dividi le stringhe di testo per delimitatore in più righe
  • Normalmente, puoi utilizzare la funzione Testo in colonna per dividere il contenuto della cella in più colonne in base a un delimitatore specifico, come virgola, punto, punto e virgola, barra, ecc. Ma, a volte, potresti dover dividere il contenuto della cella delimitato in più righe e ripetere i dati da altre colonne come mostrato nell'immagine sottostante. Hai qualche buon modo per gestire questa attività in Excel? Questo tutorial introdurrà alcuni metodi efficaci per completare questo lavoro in Excel.
  • Dividi il contenuto delle celle multilinea in righe/colonne separate
  • Supponendo di avere un contenuto di celle multilinea separato da Alt + Invio e ora è necessario dividere il contenuto multilinea in righe o colonne separate, cosa puoi fare? In questo articolo imparerai come dividere rapidamente il contenuto di celle multilinea in righe o colonne separate.

I migliori strumenti per la produttività in ufficio

🤖 Assistente AI di Kutools: Rivoluziona l'analisi dei dati basandosi su: Esecuzione intelligente   |  Genera codice  |  Crea formule personalizzate  |  Analizzare i dati e generare grafici  |  Richiama le funzioni di Kutools...
Funzioni popolari: Trova, evidenzia o identifica i duplicati   |  Elimina righe vuote   |  Combina colonne o celle senza perdere dati   |   Round senza formula ...
Super ricerca: VLookup a criteri multipli    VLookup a valori multipli  |   VLookup su più fogli   |   Ricerca fuzzy ....
Elenco a discesa avanzato: Crea rapidamente un elenco a discesa   |  Elenco a discesa dipendente   |  Elenco a discesa a selezione multipla ....
Gestore di colonna: Aggiungi un numero specifico di colonne  |  Sposta colonne  |  Attiva/disattiva lo stato di visibilità delle colonne nascoste  |  Confronta intervalli e colonne ...
Funzionalità in primo piano: Messa a fuoco della griglia   |  Vista di progettazione   |   Grande barra delle formule    Gestore di cartelle di lavoro e fogli   |  Resource Library (Testo automatico)   |  Date picker   |  Combina fogli di lavoro   |  Crittografa/decrittografa le celle    Invia e-mail per elenco   |  Super filtro   |   Filtro speciale (filtro grassetto/corsivo/barrato...) ...
I 15 migliori set di strumenti12 Testo Strumenti (aggiungi testo, Rimuovi personaggi, ...)   |   50+ Grafico Tipi (Diagramma di Gantt, ...)   |   40+ Pratico Formule (Calcola l'età in base al compleanno, ...)   |   19 Inserimento Strumenti (Inserisci il codice QR, Inserisci immagine dal percorso, ...)   |   12 Conversione Strumenti (Numeri in parole, Conversione di valuta, ...)   |   7 Unisci e dividi Strumenti (Combina righe avanzate, Celle divise, ...)   |   ... e altro ancora

Potenzia le tue competenze di Excel con Kutools per Excel e sperimenta l'efficienza come mai prima d'ora. Kutools per Excel offre oltre 300 funzionalità avanzate per aumentare la produttività e risparmiare tempo.  Fai clic qui per ottenere la funzionalità di cui hai più bisogno...

Descrizione


Office Tab porta l'interfaccia a schede in Office e semplifica notevolmente il tuo lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!
Comments (313)
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
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