Przejdź do głównej zawartości

Porady programu Excel: Podziel dane na wiele arkuszy/zeszytów na podstawie wartości kolumny

Podczas zarządzania dużymi zbiorami danych w programie Excel bardzo korzystne może być podzielenie danych na wiele arkuszy kalkulacyjnych w oparciu o określone wartości kolumn. Metoda ta poprawia nie tylko organizację danych, ale także zwiększa ich czytelność i ułatwia analizę danych.

Załóżmy, że masz duży rekord sprzedaży zawierający wiele wpisów, takich jak nazwa produktu i ilość sprzedana w pierwszym kwartale. Celem jest podzielenie tych danych na osobne arkusze w oparciu o nazwę każdego produktu, aby można było osobno analizować poszczególne wyniki sprzedaży.

Podziel dane na wiele arkuszy na podstawie wartości kolumny

Podziel dane na wiele skoroszytów na podstawie wartości kolumny za pomocą kodu VBA


Podziel dane na wiele arkuszy na podstawie wartości kolumny

Zwykle możesz najpierw posortować listę danych, a następnie skopiować je i wkleić jeden po drugim do innych nowych arkuszy. Jednak wielokrotne kopiowanie i wklejanie będzie wymagało cierpliwości. W tej sekcji przedstawimy dwie proste metody skutecznego rozwiązania tego zadania w programie Excel, oszczędzając czas i zmniejszając ryzyko błędów.

Podziel dane na wiele arkuszy na podstawie wartości kolumny za pomocą kodu VBA

1. Przytrzymaj przycisk ALT + F11 klawisze, aby otworzyć Microsoft Visual Basic for Applications okno.

2. kliknij wstawka > Modułi wklej następujący kod w oknie modułu.

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. Następnie naciśnij F5 klawisz, aby uruchomić kod, po czym pojawi się okno przypominające o wybraniu wiersza nagłówka, a następnie kliknij OK. Zobacz zrzut ekranu:

4. W drugim oknie zachęty wybierz dane kolumny, na podstawie których chcesz dokonać podziału, a następnie kliknij OK. Zobacz zrzut ekranu:

5. Wszystkie dane w aktywnym arkuszu są podzielone na wiele arkuszy na podstawie wartości kolumn. Powstałe arkusze są nazywane zgodnie z wartościami w podzielonych komórkach i umieszczane na końcu skoroszytu. Zobacz zrzut ekranu:

 

Podziel dane na wiele arkuszy kalkulacyjnych na podstawie wartości kolumny za pomocą Kutools for Excel

Kutools dla programu Excel zapewnia inteligentną funkcję – Podziel dane bezpośrednio do środowiska Excel. Dzielenie danych na wiele arkuszy nie jest już wyzwaniem. Nasze intuicyjne narzędzie automatycznie dzieli Twój zbiór danych na podstawie wybranej wartości kolumny lub liczby wierszy, zapewniając, że każda informacja znajdzie się dokładnie tam, gdzie jej potrzebujesz. Pożegnaj żmudne zadanie ręcznego porządkowania arkuszy kalkulacyjnych i skorzystaj z szybszego i bezbłędnego sposobu zarządzania danymi.

Note: Aby to zastosować Podziel dane, po pierwsze, należy pobrać plik Kutools dla programu Excel, a następnie szybko i łatwo zastosuj tę funkcję.

Po zainstalowaniu Kutools dla programu Excel, wybierz zakres danych i kliknij Kutools Plus > Podziel dane otworzyć Podziel dane na wiele arkuszy okno dialogowe.

  1. Wybierz Konkretna kolumna opcja w Podziel na podstawie i wybierz z listy rozwijanej wartość kolumny, na podstawie której chcesz podzielić dane.
  2. Jeśli Twoje dane mają nagłówki i chcesz wstawić je do każdego nowego podzielonego arkusza, sprawdź Moje dane mają nagłówki opcja. (Możesz określić liczbę wierszy nagłówka na podstawie swoich danych. Na przykład, jeśli Twoje dane zawierają dwa nagłówki, wpisz 2.)
  3. Następnie możesz określić nazwy podzielonych arkuszy roboczych w obszarze Nowa nazwa arkusza sekcji, określ regułę nazw arkuszy z listy rozwijanej Reguły, możesz dodać Prefiks or Przyrostek również dla nazw arkuszy.
  4. Kliknij OK przycisk. Zobacz zrzut ekranu:

Teraz dane w arkuszu zostaną podzielone na wiele arkuszy w nowym skoroszycie.


Podziel dane na wiele skoroszytów na podstawie wartości kolumny za pomocą kodu VBA

Czasami zamiast dzielić dane na wiele arkuszy, bardziej korzystne może być podzielenie danych na osobne skoroszyty na podstawie kolumny kluczowej. Oto przewodnik krok po kroku, jak używać kodu VBA do automatyzacji procesu dzielenia danych na wiele skoroszytów na podstawie określonej wartości kolumny.

1. Przytrzymaj przycisk ALT + F11 klawisze, aby otworzyć Microsoft Visual Basic for Applications okno.

2. kliknij wstawka > Modułi wklej następujący kod w Okno modułu.

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: W powyższym kodzie powinieneś zmienić ścieżkę pliku na własną, w której zostaną zapisane podzielone skoroszyty w tym skrypcie: savePath = "C:\Users\AddinsVM001\Desktop\wiele plików\'.

3. Następnie naciśnij F5 klawisz, aby uruchomić kod, po czym pojawi się okno przypominające o wybraniu wiersza nagłówka, a następnie kliknij OK. Zobacz zrzut ekranu:

4. W drugim oknie zachęty wybierz dane kolumny, na podstawie których chcesz dokonać podziału, a następnie kliknij OK. Zobacz zrzut ekranu:

5. Po podzieleniu wszystkie dane w aktywnym arkuszu są dzielone na wiele skoroszytów na podstawie wartości kolumn. Wszystkie podzielone skoroszyty zostaną zapisane w określonym folderze. Zobacz zrzut ekranu:

Podobne artykuły:

  • Podziel dane na wiele arkuszy według liczby wierszy
  • Efektywne podzielenie dużego zakresu danych na wiele arkuszy programu Excel w oparciu o określoną liczbę wierszy może usprawnić zarządzanie danymi. Na przykład podzielenie zbioru danych co 5 wierszy na wiele arkuszy może ułatwić zarządzanie nim i jego organizację. W tym przewodniku przedstawiono dwie praktyczne metody szybkiego i łatwego wykonania tego zadania.
  • Scal dwie lub więcej tabel w jedną na podstawie kluczowych kolumn
  • Przypuśćmy, że masz trzy tabele w skoroszycie, teraz chcesz scalić te tabele w jedną tabelę na podstawie odpowiednich kolumn kluczowych, aby uzyskać wynik jak na poniższym zrzucie ekranu. Dla większości z nas może to być kłopotliwe zadanie, ale proszę się nie martwić, w tym artykule przedstawię kilka metod rozwiązania tego problemu.
  • Podziel ciągi tekstowe według ograniczników na wiele wierszy
  • Zwykle można użyć funkcji Tekst na kolumnę, aby podzielić zawartość komórki na wiele kolumn za pomocą określonego ogranicznika, takiego jak przecinek, kropka, średnik, ukośnik itp. Czasami jednak może być konieczne podzielenie rozdzielanej zawartości komórki na wiele wierszy i powtórz dane z innych kolumn, jak pokazano na poniższym zrzucie ekranu. Czy masz jakieś dobre sposoby radzenia sobie z tym zadaniem w Excelu? W tym samouczku przedstawimy kilka skutecznych metod wykonywania tej pracy w programie Excel.
  • Podziel zawartość komórek wielowierszowych na oddzielne wiersze/kolumny
  • Przypuśćmy, że masz wielowierszową zawartość komórki, która jest oddzielona Alt + Enter, a teraz musisz podzielić zawartość wielowierszową na oddzielone wiersze lub kolumny, co możesz zrobić? W tym artykule dowiesz się, jak szybko podzielić zawartość komórek wielowierszowych na oddzielne wiersze lub kolumny.

Najlepsze narzędzia biurowe

🤖 Pomocnik AI Kutools: Zrewolucjonizuj analizę danych w oparciu o: Inteligentne wykonanie   |  Wygeneruj kod  |  Twórz niestandardowe formuły  |  Analizuj dane i generuj wykresy  |  Wywołaj funkcje Kutools...
Popularne funkcje: Znajdź, wyróżnij lub zidentyfikuj duplikaty   |  Usuń puste wiersze   |  Łącz kolumny lub komórki bez utraty danych   |   Okrągły bez wzoru ...
Super wyszukiwanie: Wiele kryteriów VLookup    Wiele wartości VLookup  |   Przeglądanie pionowe na wielu arkuszach   |   Wyszukiwanie rozmyte ....
Zaawansowana lista rozwijana: Szybko twórz listę rozwijaną   |  Zależna lista rozwijana   |  Lista rozwijana wielokrotnego wyboru ....
Menedżer kolumn: Dodaj określoną liczbę kolumn  |  Przesuń kolumny  |  Przełącz stan widoczności ukrytych kolumn  |  Porównaj zakresy i kolumny ...
Polecane funkcje: Fokus siatki   |  Widok projektu   |   Duży pasek formuły    Menedżer skoroszytów i arkuszy   |  Biblioteka zasobów (Automatyczny tekst)   |  Selektor dat   |  Połącz arkusze   |  Szyfruj/odszyfruj komórki    Wysyłaj e-maile według listy   |  Super filtr   |   Specjalny filtr (filtruj pogrubienie/kursywa/przekreślenie...) ...
15 najlepszych zestawów narzędzi12 Tekst Tools (Dodaj tekst, Usuń znaki, ...)   |   50 + Wykres rodzaje (Wykres Gantta, ...)   |   40+ Praktyczne Wzory (Oblicz wiek na podstawie urodzin, ...)   |   19 Wprowadzenie Tools (Wstaw kod QR, Wstaw obraz ze ścieżki, ...)   |   12 Konwersja Tools (Liczby na słowa, Przeliczanie walut, ...)   |   7 Połącz i podziel Tools (Zaawansowane wiersze łączenia, Podział komórki, ...)   |   ... i więcej

Zwiększ swoje umiejętności Excela dzięki Kutools for Excel i doświadcz wydajności jak nigdy dotąd. Kutools dla programu Excel oferuje ponad 300 zaawansowanych funkcji zwiększających produktywność i oszczędzających czas.  Kliknij tutaj, aby uzyskać funkcję, której najbardziej potrzebujesz...

Opis


Karta Office wprowadza interfejs z zakładkami do pakietu Office i znacznie ułatwia pracę

  • Włącz edycję i czytanie na kartach w programach Word, Excel, PowerPoint, Publisher, Access, Visio i Project.
  • Otwieraj i twórz wiele dokumentów w nowych kartach tego samego okna, a nie w nowych oknach.
  • Zwiększa produktywność o 50% i redukuje setki kliknięć myszką każdego dnia!
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