Kiến Thức Excel Cách tách bảng trong Excel thành nhiều bảng dựa trên giá trị...

Cách tách bảng trong Excel thành nhiều bảng dựa trên giá trị cột

Giả sử có một bảng dữ liệu trong Excel và giờ ta muốn tách dữ liệu trong bảng đó thành nhiều bảng theo một giá trị nào đó như dưới đây:

tách bảng thành nhiều bảng trong excel

Để thực hiện tách bảng như trên, thì ta có thể sử dụng các cách sau

  • Cách 1: Sử dụng công thức hàm FILTER để tiến hành tách.
  • Cách 2: Sử dụng mã VBA để tự động tách hàm.

Sau đây mình sẽ hướng dẫn chi tiết từng cách để tách bảng thành nhiều bảng theo dữ liệu trong cột:

Cách 1: Sử dụng công thức với hàm FILTER

Ví dụ ta có một bảng dữ liệu dài như này với số liệu rất khó để theo dõi:

bảng dữ liệu mẫu để tách

Giờ ta muốn tách bảng dữ liệu trên thành dữ liệu theo từng năm, thì ta sẽ thực hiện như sau:

Bước 1: Vì trên bảng dữ liệu trên chưa có sẵn giá trị cột theo năm, nên ta sẽ tạo thêm cột phụ “Year” để tách lấy năm từ dữ liệu cột Date (ở cột A) với hàm Year với công thức như sau: =YEAR(A2)

tạo cột phụ lọc giá trị để tách bảng

Sau đó ta sẽ được bảng như sau:

kết quả tạo cột phụ lọc giá trị để tách bảng

Bước 2: Giờ ta sẽ cần phải lọc lấy giá trị duy nhất trong cột Years vừa tạo bằng hàm UNIQUE. Mục đích việc này để tạo ra giá trị để lát dùng trong hàm FILTER sử dụng để tách bảng lúc sau:

lọc giá trị năm duy nhất với hàm UNIQUE

Sau đây ta sẽ xử lý một chút để phân thành các khu vực để lát ta sẽ tách bảng theo các giá trị năm.

Bước 3: Giờ ta sẽ sử dụng hàm FILTER để tiến hành tách bảng dữ liệu trên thành nhiểu bảng dữ liệu theo từng năm như sau:

  • Công thức chung hàm FILTER: =FILTER(array;include;[if_emty])
  • Áp dụng cho ví dụ trên, ví dụ ta cần lấy dữ liệu trong mảng array là A2:C168 với include là trong giá trị trong cột D2:D168="giá trị năm". Lưu ý các mảng dữ liệu trong công thức ta sẽ khóa để tránh lệch khi kéo công thức. Lúc này ta sẽ sử dụng hàm FILTER để tách như sau: =FILTER($A$2:$C$168;$D$2:$D$168=G1) trong đó G1 là chứa số năm 2014.

công thức hàm FILTER để tách bảng

Kết quả ta sẽ tách được bảng dữ liệu gốc ban đầu thành 1 bảng dữ liệu dành riêng cho năm 2014 như sau:

kết quả hàm FIlTER để tách bảng

Giờ ta sẽ kéo hàm sang tương tự cho các năm khác:

kéo hàm sang để tách bảng tương tự cho các năm

Như vậy là ta đã tách hoàn toàn nhiều bảng theo giá trị năm từ một bảng dữ liệu gốc.

Bạn có thể xem Video dưới đây để theo dõi cách làm chi tiết:

Cách 2: Sử dụng mã VBA để tách bảng thành nhiều bảng tự động

Cách 1 sử dụng hàm để tách bảng dữ liệu phải làm thủ công và nhiều thời gian, để tự động ta có thể sử dụng mã VBA như sau:

Ta thực hiện với bảng dữ liệu về danh sách nhân viên như sau:

bảng dữ liệu mẫu để sử dụng mã VBA để tách bảng

Giờ ta muốn tách bảng dữ liệu theo cột Employee ID để lấy dữ liệu theo từng nhân viên, thì làm như sau:

Bước 1: Ta cần biến bảng dữ liệu trên thành bảng bằng cách bôi đen toàn bộ dữ liệu bảng gốc => rồi nhấn tổ hợp phím Ctrl + T

tạo bảng Table để chuẩn bị tách bảng

Bước 2: Sau đó ta sẽ nhấp chuột phải vào tên Sheet => rồi chọn View Code để mở cửa sổ Microsoft Visual Basic For Applications cho sheet => sau đó dán đoạn mã sau vào:

Sub SplitTable()
Dim wss As Worksheet
Dim wst As Worksheet
Dim tbs As ListObject
Dim newTable As ListObject
Dim ids As Collection
Dim cel As Range
Dim rt As Long
Dim id As Variant
Application.ScreenUpdating = False
Set wss = ActiveSheet
Set tbs = wss.Range("A1").ListObject
Set ids = New Collection
On Error Resume Next
For Each cel In tbs.ListColumns("Employee ID").DataBodyRange
ids.Add Key:=CStr(cel.Value), Item:=cel.Value
Next cel
On Error GoTo 0
Set wst = Worksheets.Add(After:=wss)
wst.Range("Z1").Value = "Employee ID"
rt = 1
For Each id In ids
tbs.HeaderRowRange.Copy Destination:=wst.Range("A" & rt)
wst.Range("Z2").Value = id
tbs.Range.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=wst.Range("Z1:Z2"), _
CopyToRange:=wst.Range("A" & rt + 1)
wst.Range("A" & rt).CurrentRegion.Rows(1).Delete Shift:=xlShiftUp
' Add the table and get a reference to it
Set newTable = wst.ListObjects.Add(Source:=wst.Range("A" & rt).CurrentRegion)
' Enable total row for the new table
newTable.ShowTotals = True
rt = rt + wst.Range("A" & rt).CurrentRegion.Rows.Count + 1
Next id
wst.Range("Z1:Z2").Clear
wst.UsedRange.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub

Sau khi dán mã xong, ta nhấp chuột vào tên cột chứa giá trị cần tách bảng (ở đây là Employee ID), để đoạn mã sẽ được tự động cập nhật tách giá trị theo cột nhấp vào:

nhấp vào view code để mở VBA

dán mã VBA để tách bảng

Bước 3: Sau đó ta nhấn F5 để chạy mã VBA. Sau khi mã chạy xong nó sẽ tạo một Sheet mới và dữ liệu bảng gốc được tách theo từng giá trị trong cột Employee ID.

kết quả khi chạy mã VBA tách bảng

Trên đây là hướng dẫn cách chia bảng dữ liệu trong Excel thành nhiều bảng theo giá trị trong cột. Mong rằng bài viết này hữu ích và giúp các bạn trong quá trình làm việc!