Cookie giúp chúng tôi cung cấp dịch vụ của chúng tôi. Bằng cách sử dụng dịch vụ của chúng tôi, bạn đồng ý sử dụng cookie.
Mẹo: Các ngôn ngữ khác được Dịch bởi Google. Bạn có thể ghé thăm English phiên bản của liên kết này.
Đăng nhập
x
or
x
x
Ghi danh
x

or

Làm thế nào để chia dữ liệu thành nhiều bảng tính dựa trên cột trong Excel?

Giả sử bạn có một bảng tính với các dãy dữ liệu khổng lồ, và bây giờ, bạn cần chia dữ liệu thành nhiều bảng tính dựa trên Họ tên* cột (xem ảnh chụp màn hình sau) và tên được nhập ngẫu nhiên. Có lẽ bạn có thể sắp xếp chúng trước, sau đó sao chép và dán từng cái một vào các trang tính mới khác. Nhưng điều này sẽ cần sự kiên nhẫn của bạn để sao chép và dán nhiều lần. Hôm nay, tôi sẽ nói về một số thủ thuật nhanh để giải quyết nhiệm vụ này.

doc chia dữ liệu theo cột 1

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

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


Chia dữ liệu thành nhiều trang tính dựa trên cột hoặc hàng cụ thể được tính trong trang tính:

Nếu bạn muốn chia một trang tính lớn thành nhiều trang tính dựa trên dữ liệu cột cụ thể hoặc số lượng hàng, thì Kutools cho Excel's Chia dữ liệu tính năng có thể giúp bạn giải quyết tác vụ này nhanh chóng và dễ dàng.

doc chia dữ liệu theo cột 6

Kutools cho Excel: với hơn 200 tiện ích bổ sung Excel, miễn phí để thử mà không có giới hạn trong 60 ngày. Tải xuống và dùng thử ngay bây giờ!


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


Nếu bạn muốn chia nhỏ dữ liệu dựa trên giá trị cột một cách nhanh chóng và tự động, mã VBA sau đây là một lựa chọn tốt. Vui lòng làm như sau:

1. 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ô-đun, và dán mã sau vào cửa sổ mô-đun.

Sub Splitdatabycol()
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
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
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
xWSTRg.Range(title).Copy
Sheets(myarr(i) & "").Paste Destination:=Sheets(myarr(i) & "").Range("A1")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").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 Phím để chạy mã và một hộp nhắc nhở được bật ra để nhắc bạn chọn hàng tiêu đề, xem ảnh chụp màn hình:

doc chia dữ liệu theo cột 7

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

doc chia dữ liệu theo cột 8

5. Sau đó nhấn vào OKvà tất cả dữ liệu trong trang tính đang hoạt động được chia thành nhiều trang tính theo giá trị cột. Và các bảng tính phân chia được đặt tên với các tên ô phân chia. Xem ảnh chụp màn hình:

doc chia dữ liệu theo cột 2

chú thích: Các bảng chia sẽ được đặt vào cuối của bảng tính mà ở đó có bảng tính tổng thể.


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

Là một người mới bắt đầu của Excel, mã VBA dài này hơi khó khăn cho chúng tôi và hầu hết chúng ta thậm chí không biết làm thế nào để sửa đổi mã theo nhu cầu của chúng tôi.

Ở đây, tôi sẽ giới thiệu cho bạn một công cụ đa chức năng -Kutools cho ExcelCủa nó, Chia dữ liệu tiện ích không chỉ có thể giúp bạn chia nhỏ dữ liệu thành nhiều bảng tính dựa trên cột, mà còn có thể chia dữ liệu theo số hàng.

Kutools cho Excel : với nhiều hơn 300 tiện ích bổ sung Excel, miễn phí để thử mà không có giới hạn trong 60 ngày.

Nếu bạn đã cài đặt Kutools cho Excel, vui lòng thực hiện như sau:

1. Chọn dải dữ liệu bạn muốn chia.

2. Nhấp chuột Kutools Plus > Bảng > Chia dữ liệu, xem ảnh chụp màn hình:

doc chia dữ liệu theo cột 3

3. Trong Chia dữ liệu thành nhiều bảng tính hộp thoại, bạn cần phải:

1). Lựa chọn Cụm cột tùy chọn trong Chia dựa trên , và chọn giá trị cột mà bạn muốn chia nhỏ dữ liệu dựa trên danh sách thả xuống. (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 chia nhỏ mới, vui lòng kiểm tra Dữ liệu của tôi có tiêu đề Tùy chọn.)

2). Sau đó, bạn có thể chỉ định tên bảng chia, theo Tên bảng tính mới , chỉ rõ các quy tắc về tên trang tính từ Nội quy danh sách thả xuống, bạn có thể thêm Tiếp đầu ngữ or suffix cho các bảng tính là tốt.

3). Nhấn vào OK nút. Xem ảnh chụp màn hình:

doc chia dữ liệu theo cột 4

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

doc chia dữ liệu theo cột 5

Nhấn vào đây để tải Kutools cho Excel và dùng thử ngay!


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

Kutools cho Excel bao gồm nhiều công cụ Excel tiện dụng hơn 300. Tự do thử mà không bị giới hạn trong 60 ngày. Tải xuống dùng thử ngay bây giờ!


Bài viết liên quan:

Làm thế nào để chia dữ liệu thành nhiều bảng tính theo số hàng?



Các công cụ sản xuất được đề nghị

Tab Office

sao vàng1 Mang các tab tiện dụng vào Excel và các phần mềm Office khác, giống như Chrome, Firefox và Internet Explorer mới.

Kutools cho Excel

sao vàng1 Kinh ngạc! Tăng năng suất của bạn trong 5 phút. Không cần bất kỳ kỹ năng đặc biệt, tiết kiệm được hai giờ mỗi ngày!

sao vàng1 300 Các tính năng mới cho Excel, Làm cho Excel dễ dàng và mạnh mẽ:

  • Hợp nhất ô / Hàng / Cột mà không mất dữ liệu.
  • Kết hợp và Hợp nhất nhiều trang tính và Workbooks.
  • So sánh các dãy, sao chép nhiều dãy, chuyển đổi văn bản sang ngày, đơn vị và chuyển đổi tiền tệ.
  • Đếm theo màu sắc, Paging Subtotals, sắp xếp nâng cao và Super Filter,
  • Thêm / Chèn / Xóa / Văn bản / Định dạng / Liên kết / Nhận xét / Tập tin / Workheets Công cụ ...

Ảnh chụp màn hình của Kutools cho Excel

Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Rudi Miller · 2 days ago
    Sub parse_data()
    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
    vcol = 1
    Set ws = Sheets("Sheet1")
    lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
    title = "A1:C1"
    titlerow = ws.Range(title).Cells(1).Row
    icol = ws.Columns.Count
    ws.Cells(1, icol) = "Unique"
    For i = 2 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
    Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
    Else
    Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
    End If
    ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
    Sheets(myarr(i) & "").Columns.AutoFit
    Next
    ws.AutoFilterMode = False
    ws.Activate
    End Sub
  • To post as a guest, your comment is unpublished.
    Jason · 1 months ago
    This formula is great, works perfectly for me.
    I want to split out data based on a location, which is in column 1. Which this does.
    However, is it possible to also split out based on column 2, for example. Built and Not Built. So a secondary condition also?
  • To post as a guest, your comment is unpublished.
    jose · 1 months ago
    can someone help please im using this but i keep getting to many columns. i have to keep deleting rows every time i use this.

    This is what im using


    Sub parse_data()
    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
    vcol = 1
    Set ws = Sheets("sheet1")
    lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
    title = "A1:AN1"
    titlerow = ws.Range(title).Cells(1).Row
    icol = ws.Columns.Count
    ws.Cells(1, icol) = "Unique"
    For i = 2 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
    Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
    Else
    Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
    End If
    ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
    Sheets(myarr(i) & "").Columns.AutoFit
    Next
    ws.AutoFilterMode = False
    ws.Activate
    End Sub
  • To post as a guest, your comment is unpublished.
    avinash · 1 months ago
    Thanks for VBA, it works great. In addition to that question, I have column which is dependent. So when i select some value my column values get changed hence I need vba solution to replace earlier split worksheet to replace with new value of columns. Can anyone help me out.?

    Thanks in advance
  • To post as a guest, your comment is unpublished.
    JP Tontegode · 1 months ago
    Is there a way to have the macro create a separate spreadsheet for each new tab instead of just adding a tab into the current worksheet? Thanks!