Přejít k hlavnímu obsahu

Tipy aplikace Excel: Rozdělte data do více listů / sešitů na základě hodnoty sloupce

Autor: Xiaoyang Naposledy změněno: 2024-04-26

Při správě velkých datových sad v Excelu může být velmi užitečné rozdělit data do více listů na základě konkrétních hodnot sloupců. Tato metoda zlepšuje nejen organizaci dat, ale také zlepšuje čitelnost a usnadňuje analýzu dat.

Předpokládejme, že máte velký záznam o prodeji obsahující více položek, jako je název produktu, prodané množství za první čtvrtletí. Cílem je rozdělit tato data do samostatných listů na základě každého názvu produktu, aby bylo možné analyzovat jednotlivé prodejní výkony samostatně.

Rozdělte data do více listů na základě hodnoty sloupce

Rozdělte data do více sešitů na základě hodnoty sloupce pomocí kódu VBA


Rozdělte data do více listů na základě hodnoty sloupce

Obvykle můžete seznam dat nejprve seřadit a poté je zkopírovat a vložit jeden po druhém do dalších nových listů. To však bude vyžadovat vaši trpělivost, abyste je mohli opakovaně kopírovat a vkládat. V této části představíme dvě jednoduché metody, jak efektivně zvládnout tento úkol v Excelu, což vám ušetří čas a sníží možnost chyb.

Rozdělte data do více listů na základě hodnoty sloupce pomocí kódu VBA

1. Podržte stisknuté tlačítko ALT + F11 klávesy pro otevření Microsoft Visual Basic pro aplikace okno.

2. cvaknutí Vložit > Modula vložte následující kód do okna modulu.

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. Poté stiskněte F5 pro spuštění kódu a zobrazí se okno s výzvou, které vám připomene vybrat řádek záhlaví a poté klepněte OK. Viz snímek obrazovky:

4. Ve druhém řádku výzvy vyberte data sloupce, podle kterých chcete rozdělit, a poté klepněte OK. Viz snímek obrazovky:

5. Všechna data v aktivním listu jsou rozdělena do více listů na základě hodnot sloupců. Výsledné listy jsou pojmenovány podle hodnot v rozdělených buňkách a jsou umístěny na konci sešitu. Viz snímek obrazovky:

 

Rozdělte data do více listů na základě hodnoty sloupce pomocí Kutools pro Excel

Kutools pro Excel přináší chytrou funkci – Rozdělit data přímo do vašeho prostředí Excelu. Rozdělení dat do více listů již není problém. Náš intuitivní nástroj automaticky rozdělí vaši datovou sadu na základě zvolené hodnoty sloupce nebo počtu řádků a zajistí, že každá informace bude přesně tam, kde ji potřebujete. Rozlučte se s únavným úkolem ručního organizování tabulek a osvojte si rychlejší a bezchybný způsob správy dat.

Poznámka: Použít toto Rozdělit dataNejprve byste si měli stáhnout soubor Kutools pro Excela poté tuto funkci rychle a snadno aplikujte.

Po instalaci Kutools pro Excel, vyberte rozsah dat a poté klikněte na Kutools Plus > Rozdělit data k otevření Rozdělte data do více listů dialogové okno.

  1. vybrat Specifický sloupec možnost v Rozdělit na základě a z rozevíracího seznamu vyberte hodnotu sloupce, podle které chcete data rozdělit.
  2. Pokud vaše data mají záhlaví a chcete je vložit do každého nového rozděleného listu, zkontrolujte Moje data mají záhlaví volba. (Počet řádků záhlaví můžete určit na základě vašich dat. Pokud například vaše data obsahují dvě záhlaví, zadejte 2.)
  3. Poté můžete určit názvy dělených listů pod položkou Název nového listu určete pravidlo pro názvy listů z rozevíracího seznamu Pravidla, můžete přidat Předpona or Přípona i pro názvy listů.
  4. Klepněte na tlačítko OK knoflík. Viz screenshot:

Nyní jsou data v listu rozdělena do více listů v novém sešitu.


Rozdělte data do více sešitů na základě hodnoty sloupce pomocí kódu VBA

Někdy může být výhodnější rozdělit data do samostatných sešitů na základě klíčového sloupce než rozdělovat data do více listů. Zde je podrobný návod, jak používat kód VBA k automatizaci procesu rozdělování dat do více sešitů na základě konkrétní hodnoty sloupce.

1. Podržte stisknuté tlačítko ALT + F11 klávesy pro otevření Microsoft Visual Basic pro aplikace okno.

2. cvaknutí Vložit > Modula vložte následující kód do Okno modulu.

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
Poznámka: Ve výše uvedeném kódu byste měli změnit cestu k souboru na svou vlastní, kam se uloží rozdělené sešity v tomto skriptu: savePath = "C:\Users\AddinsVM001\Desktop\více souborů\".

3. Poté stiskněte F5 pro spuštění kódu a zobrazí se okno s výzvou, které vám připomene vybrat řádek záhlaví a poté klepněte OK. Viz snímek obrazovky:

4. Ve druhém řádku výzvy vyberte data sloupce, podle kterých chcete rozdělit, a poté klepněte OK. Viz snímek obrazovky:

5. Po rozdělení jsou všechna data v aktivním listu rozdělena do více sešitů na základě hodnot sloupců. Všechny rozdělené sešity se uloží do vámi určené složky. Viz snímek obrazovky:

Související články:

  • Rozdělte data do více listů podle počtu řádků
  • Efektivní rozdělení velkého rozsahu dat do více listů aplikace Excel na základě konkrétního počtu řádků může zefektivnit správu dat. Například rozdělení datové sady každých 5 řádků do více listů ji může učinit lépe spravovatelnou a organizovanou. Tato příručka nabízí dvě praktické metody, jak tento úkol provést rychle a snadno.
  • Sloučit dvě nebo více tabulek do jedné na základě klíčových sloupců
  • Předpokládejme, že máte v sešitu tři tabulky, nyní chcete tyto tabulky sloučit do jedné tabulky na základě odpovídajících klíčových sloupců, abyste získali výsledek, jak je znázorněno níže. To může být pro většinu z nás obtížný úkol, ale nebojte se, tento článek, představím některé metody řešení tohoto problému.
  • Rozdělit textové řetězce pomocí oddělovače do více řádků
  • Normálně můžete použít funkci Text to Column k rozdělení obsahu buňky do více sloupců pomocí určitého oddělovače, jako je čárka, tečka, středník, lomítko atd. Někdy však může být nutné rozdělit obsah buňky s oddělovači do více řádků a zopakujte data z dalších sloupců, jak je uvedeno níže. Máte nějaké dobré způsoby, jak se s tímto úkolem vypořádat v aplikaci Excel? Tento tutoriál představí některé efektivní metody k dokončení této úlohy v Excelu.
  • Rozdělte obsah víceřádkové buňky do oddělených řádků/sloupců
  • Předpokládejme, že máte víceřádkový obsah buňky, který je oddělen Alt + Enter, a nyní potřebujete rozdělit víceřádkový obsah na samostatné řádky nebo sloupce, co můžete dělat? V tomto článku se naučíte, jak rychle rozdělit víceřádkový obsah buněk do oddělených řádků nebo sloupců.

Nejlepší nástroje pro produktivitu v kanceláři

🤖 Kutools AI asistent: Revoluční analýza dat založená na: Inteligentní provedení   |  Generovat kód  |  Vytvořte vlastní vzorce  |  Analyzujte data a generujte grafy  |  Vyvolejte funkce Kutools...
Populární funkce: Najít, zvýraznit nebo identifikovat duplikáty   |  Odstranit prázdné řádky   |  Kombinujte sloupce nebo buňky bez ztráty dat   |   Kolo bez vzorce ...
Super vyhledávání: Více kritérií VLookup    VLookup s více hodnotami  |   VLookup na více listech   |   Fuzzy vyhledávání ....
Pokročilý rozevírací seznam: Rychle vytvořte rozevírací seznam   |  Závislý rozbalovací seznam   |  Vícenásobný výběr rozevíracího seznamu ....
Správce sloupců: Přidejte konkrétní počet sloupců  |  Přesunout sloupce  |  Přepnout stav viditelnosti skrytých sloupců  |  Porovnejte rozsahy a sloupce ...
Doporučené funkce: Zaměření mřížky   |  Návrhové zobrazení   |   Velký Formula Bar    Správce sešitů a listů   |  Knihovna zdrojů (Automatický text)   |  Výběr data   |  Zkombinujte pracovní listy   |  Šifrovat/dešifrovat buňky    Odesílat e-maily podle seznamu   |  Super filtr   |   Speciální filtr (filtr tučné/kurzíva/přeškrtnuté...) ...
Top 15 sad nástrojů12 Text Tools (doplnit text, Odebrat znaky, ...)   |   50+ Graf Typ nemovitosti (Ganttův diagram, ...)   |   40+ Praktické Vzorce (Vypočítejte věk na základě narozenin, ...)   |   19 Vložení Tools (Vložte QR kód, Vložit obrázek z cesty, ...)   |   12 Konverze Tools (Čísla na slova, Přepočet měny, ...)   |   7 Sloučit a rozdělit Tools (Pokročilé kombinování řádků, Rozdělit buňky, ...)   |   ... a více

Rozšiřte své dovednosti Excel pomocí Kutools pro Excel a zažijte efektivitu jako nikdy předtím. Kutools for Excel nabízí více než 300 pokročilých funkcí pro zvýšení produktivity a úsporu času.  Kliknutím sem získáte funkci, kterou nejvíce potřebujete...

Popis


Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci

  • Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
  • Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
  • Zvyšuje vaši produktivitu o 50%a snižuje stovky kliknutí myší každý den!
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