Bỏ qua nội dung chính

Mẹo Excel: Chia dữ liệu thành nhiều bảng tính/sổ làm việc dựa trên giá trị cột

Khi quản lý các tập dữ liệu lớn trong Excel, việc chia dữ liệu thành nhiều trang tính dựa trên các giá trị cột cụ thể có thể rất có lợi. Phương pháp này không chỉ cải thiện việc tổ chức dữ liệu mà còn tăng cường khả năng đọc và tạo điều kiện cho việc phân tích dữ liệu dễ dàng hơn.

Giả sử bạn có một bản ghi bán hàng lớn chứa nhiều mục như tên sản phẩm, số lượng bán ra trong quý đầu tiên. Mục tiêu là chia dữ liệu này thành các bảng tính riêng biệt dựa trên từng tên sản phẩm để có thể phân tích hiệu suất bán hàng riêng lẻ.

Chia dữ liệu thành nhiều bảng tính dựa trên giá trị cột

Chia dữ liệu thành nhiều sổ làm việc dựa trên giá trị cột bằng mã VBA


Chia dữ liệu thành nhiều bảng tính dựa trên giá trị cột

Thông thường, bạn có thể sắp xếp danh sách dữ liệu trước, sau đó sao chép và dán từng dữ liệu vào các bảng tính mới khác. Nhưng việc này sẽ cần sự kiên nhẫn của bạn để sao chép và dán nhiều lần. Trong phần này, chúng tôi sẽ giới thiệu hai phương pháp đơn giản để giải quyết hiệu quả tác vụ này trong Excel, giúp bạn tiết kiệm thời gian và giảm khả năng xảy ra lỗi.

Chia dữ liệu thành nhiều bảng tính dựa trên giá trị cột bằng mã VBA

1. Nhấn giữ ALT + F11 phím để mở Microsoft Visual Basic cho các ứng dụng cửa sổ.

2. nhấp chuột Chèn > Mô-đunvà dán mã sau vào Cửa sổ mô-đun.

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. Sau đó, nhấn F5 để chạy mã và một hộp nhắc xuất hiện để nhắc bạn chọn hàng tiêu đề, sau đó bấm vào OK. Xem ảnh chụp màn hình:

4. Trong hộp nhắc thứ hai, vui lòng chọn dữ liệu cột mà bạn muốn phân chia dựa trên đó, sau đó nhấp vào OK. Xem ảnh chụp màn hình:

5. Tất cả dữ liệu trong bảng tính đang hoạt động được chia thành nhiều bảng tính dựa trên các giá trị cột. Các bảng tính kết quả được đặt tên theo các giá trị trong các ô được phân tách và được đặt ở cuối sổ làm việc. Xem ảnh chụp màn hình:

 

Chia dữ liệu thành nhiều bảng tính dựa trên giá trị cột với Kutools for Excel

Kutools cho Excel mang đến tính năng thông minh – Dữ liệu phân tách ngay vào môi trường Excel của bạn. Việc chia dữ liệu thành nhiều trang tính không còn là một thách thức nữa. Công cụ trực quan của chúng tôi tự động phân chia tập dữ liệu của bạn dựa trên giá trị cột hoặc số hàng đã chọn, đảm bảo rằng mỗi phần thông tin đều ở chính xác nơi bạn cần. Hãy tạm biệt công việc tẻ nhạt là sắp xếp bảng tính theo cách thủ công và áp dụng cách quản lý dữ liệu nhanh hơn, không có lỗi.

Chú thích: Để áp dụng điều này Dữ liệu phân tách, trước tiên, bạn nên tải xuống Kutools cho Excel, và sau đó áp dụng tính năng một cách nhanh chóng và dễ dàng.

Sau khi cài đặt Kutools cho Excel, chọn phạm vi dữ liệu rồi bấm vào Kutools Plus > Dữ liệu phân tách để mở Tách dữ liệu thành nhiều bảng tính hộp thoại.

  1. Chọn Cột cụ thể tùy chọn trong Phân chia dựa trên và chọn giá trị cột mà bạn muốn phân tách dữ liệu dựa trên danh sách thả xuống.
  2. Nếu dữ liệu của bạn có tiêu đề và bạn muốn chèn chúng vào mỗi bảng tính phân chia mới, vui lòng kiểm tra Dữ liệu của tôi có tiêu đề lựa chọn. (Bạn có thể chỉ định số hàng tiêu đề dựa trên dữ liệu của mình. Ví dụ: nếu dữ liệu của bạn chứa hai tiêu đề, vui lòng nhập 2.)
  3. Sau đó, bạn có thể chỉ định các tên bảng tính đã tách, trong Tên trang tính mới phần, chỉ định quy tắc tên bảng tính từ danh sách thả xuống Quy tắc, bạn có thể thêm quy tắc Tiếp đầu ngữ or suffix cho cả tên trang tính.
  4. Nhấn vào OK cái nút. Xem ảnh chụp màn hình:

Bây giờ, dữ liệu trong bảng tính được chia thành nhiều bảng tính trong sổ làm việc mới.


Chia dữ liệu thành nhiều sổ làm việc dựa trên giá trị cột bằng mã VBA

Đôi khi, thay vì chia dữ liệu thành nhiều trang tính, việc chia dữ liệu thành các sổ làm việc riêng biệt dựa trên một cột khóa có thể sẽ có ích hơn. Dưới đây là hướng dẫn từng bước về cách sử dụng mã VBA để tự động hóa quá trình chia dữ liệu thành nhiều sổ làm việc dựa trên một giá trị cột cụ thể.

1. Nhấn giữ ALT + F11 phím để mở Microsoft Visual Basic cho các ứng dụng cửa sổ.

2. nhấp chuột Chèn > Mô-đunvà dán mã sau vào Cửa sổ mô-đun.

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
Chú thích: Trong đoạn mã trên, bạn nên thay đổi đường dẫn tệp thành đường dẫn của riêng bạn, nơi sẽ lưu các sổ làm việc được chia trong tập lệnh này: savePath = "C:\Users\AddinsVM001\Desktop\multiple files\".

3. Sau đó, nhấn F5 để chạy mã và một hộp nhắc xuất hiện để nhắc bạn chọn hàng tiêu đề, sau đó bấm vào OK. Xem ảnh chụp màn hình:

4. Trong hộp nhắc thứ hai, vui lòng chọn dữ liệu cột mà bạn muốn phân chia dựa trên đó, sau đó nhấp vào OK. Xem ảnh chụp màn hình:

5. Sau khi chia tách, tất cả dữ liệu trong bảng tính đang hoạt động sẽ được chia thành nhiều sổ làm việc dựa trên các giá trị cột. Tất cả các sổ làm việc được chia sẽ được lưu vào thư mục bạn đã chỉ định. Xem ảnh chụp màn hình:

Bài viết liên quan:

  • Chia dữ liệu thành nhiều trang tính theo số hàng
  • Việc phân chia hiệu quả một phạm vi dữ liệu lớn thành nhiều trang tính Excel dựa trên số hàng cụ thể có thể hợp lý hóa việc quản lý dữ liệu. Ví dụ: chia tập dữ liệu cứ 5 hàng thành nhiều trang có thể giúp tập dữ liệu dễ quản lý và có tổ chức hơn. Hướng dẫn này cung cấp hai phương pháp thực tế để hoàn thành nhiệm vụ này một cách nhanh chóng và dễ dàng.
  • Hợp nhất hai hoặc nhiều bảng thành một dựa trên các cột chính
  • Giả sử bạn có ba bảng trong một sổ làm việc, bây giờ, bạn muốn hợp nhất các bảng này thành một bảng dựa trên các cột chính tương ứng để nhận được kết quả như hình minh họa bên dưới. Đây có thể là một nhiệm vụ rắc rối đối với hầu hết chúng ta, nhưng, xin đừng lo lắng, bài viết này, tôi sẽ giới thiệu một số phương pháp để giải quyết vấn đề này.
  • Tách chuỗi văn bản bằng dấu phân cách thành nhiều hàng
  • Thông thường, bạn có thể sử dụng tính năng Văn bản thành Cột để chia nội dung ô thành nhiều cột bằng một dấu phân cách cụ thể, chẳng hạn như dấu phẩy, dấu chấm, dấu chấm phẩy, dấu gạch chéo, v.v. Tuy nhiên, đôi khi, bạn có thể cần chia nội dung ô được phân tách thành nhiều hàng và lặp lại dữ liệu từ các cột khác như ảnh chụp màn hình bên dưới. Bạn có cách nào tốt để xử lý tác vụ này trong Excel không? Hướng dẫn này sẽ giới thiệu một số phương pháp hiệu quả để hoàn thành công việc này trong Excel.
  • Chia nội dung ô nhiều dòng thành các hàng/cột riêng biệt
  • Giả sử bạn có nội dung ô nhiều dòng được phân tách bằng Alt + Enter và bây giờ bạn cần chia nội dung nhiều dòng thành các hàng hoặc cột được tách biệt, bạn có thể làm gì? Trong artical này, bạn sẽ học cách nhanh chóng chia nội dung ô nhiều dòng thành các hàng hoặc cột riêng biệt.

Công cụ năng suất văn phòng tốt nhất

🤖 Trợ lý AI của Kutools: Cách mạng hóa việc phân tích dữ liệu dựa trên: Thực thi thông minh   |  Tạo mã  |  Tạo công thức tùy chỉnh  |  Phân tích dữ liệu và tạo biểu đồ  |  Gọi các hàm Kutools...
Các tính năng phổ biến: Tìm, đánh dấu hoặc xác định các bản sao   |  Xóa hàng trống   |  Kết hợp các cột hoặc ô mà không làm mất dữ liệu   |   Vòng không có công thức hữu ích. Cảm ơn !
Siêu tra cứu: Nhiều tiêu chí VLookup    VLookup Nhiều Giá Trị  |   VLookup trên nhiều trang tính   |   Tra cứu mờ ....
Danh sách thả xuống nâng cao: Tạo nhanh danh sách thả xuống   |  Danh sách thả xuống phụ thuộc   |  Danh sách thả xuống nhiều lựa chọn ....
Trình quản lý cột: Thêm một số cột cụ thể  |  Di chuyển cột  |  Chuyển đổi trạng thái hiển thị của các cột ẩn  |  So sánh dãy và cột hữu ích. Cảm ơn !
Các tính năng nổi bật: Tiêu điểm lưới   |  Chế độ xem thiết kế   |   Thanh công thức lớn    Trình quản lý sổ làm việc & trang tính   |  Thư viện tài nguyên (Văn bản tự động)   |  Bảng chọn ngày   |  Kết hợp các bảng tính   |  Mã hóa/Giải mã ô    Gửi email theo danh sách   |  Siêu lọc   |   Bộ lọc đặc biệt (lọc in đậm/nghiêng/gạch ngang...) ...
15 bộ công cụ hàng đầu12 bản văn CÔNG CỤ (thêm văn bản, Xóa ký tự,...)   |   50 + Biểu đồ Các loại (Biểu đồ Gantt,...)   |   40+ Thực tế Công thức (Tính tuổi dựa trên ngày sinh,...)   |   19 chèn CÔNG CỤ (Chèn mã QR, Chèn ảnh từ đường dẫn,...)   |   12 Chuyển đổi CÔNG CỤ (Số thành từ, Chuyển đổi tiền tệ,...)   |   7 Hợp nhất & Tách CÔNG CỤ (Các hàng kết hợp nâng cao, Chia ô,...)   |   ... và nhiều hơn nữa

Nâng cao kỹ năng Excel của bạn với Kutools for Excel và trải nghiệm hiệu quả hơn bao giờ hết. Kutools for Excel cung cấp hơn 300 tính năng nâng cao để tăng năng suất và tiết kiệm thời gian.  Bấm vào đây để có được tính năng bạn cần nhất...

Mô tả


Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
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