Cho cái kết quả ví dụ xem nào.Bác nào hỗ trợ em lọc dữ liệu dùm em theo bảng như hình, chứ cứ mỗi lần nhìn cái file là em choáng hết cả đầu sợ nhìn nhằm lắmView attachment 283351
Cách xử lý của bạn là gì thì có thể đưa lên cho mọi người tham khảo.thanks các bác đã hỗ trợ vấn đề đã dc giải quyết
Sub TimeTable()
Dim sArr(), Res()
Dim lR As Long, Rw As Long, col As Integer
Dim iR As Long, R As Long, iC As Integer, J As Long, K As Long
'Dong cuoi cung co du lieu
lR = Sheet1.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
'Mang 2 chieu chua toan bo du lieu goc
sArr() = Sheet1.Range("A3:S" & (lR + 10)).Value 'Luu y tang them 1 cot va 10 dong
'So luong dong (can tren chieu thu nhat)
Rw = UBound(sArr, 1)
'So luong cot (can tren chieu thu hai)
col = UBound(sArr, 2)
'Quy dinh kich thuoc mang ket qua
ReDim Res(1 To 10000, 1 To 5)
'Chay vong lap qua tung vung thu theo dong
For iR = 3 To Rw
If Len(sArr(iR, 1)) Then 'Truong hop co thong tin Thu 2/3/4/.../7
'Vong lap qua tung vung Khoi theo cot
For iC = 2 To col
If sArr(1, iC) = "Ti" & ChrW(7871) & "t" Then 'Chon dung cot de phan chia cac Khoi
'Chay vong lap qua tung lop
J = 1
Do Until sArr(2, iC + J) = "" 'Truong hop co thong tin Lop 6/1;6/2,...
'Chay vong lap qua tung dong cua tung Thu 2/3/4
For R = 1 To 20 Step 2
If Len(sArr(iR + R - 1, iC + J)) Then 'Truong hop co thong tin mon hoc
K = K + 1
Res(K, 1) = sArr(iR, 1) 'Thu 2/3/4.../7
Res(K, 2) = sArr(iR + R - 1, iC) 'Tiet
Res(K, 3) = sArr(2, iC + J) 'Lop 6/1;6/2;...
Res(K, 4) = sArr(iR + R - 1, iC + J) 'Mon hoc
Res(K, 5) = sArr(iR + R, iC + J) 'Giao vien
End If
Next R
J = J + 1
Loop
End If
Next iC
End If
Next iR
'Xoa du lieu cu
Sheet2.UsedRange.Offset(1).ClearContents
'Dien ket qua
Sheet2.Range("A2").Resize(K, 5) = Res
'Thong bao ket qua
MsgBox "Done", vbInformation, "Daily Excel"
End Sub
Code chuẩn nhưng chắc phải thêm định dạng "lớp". Vì mình chạy nó chuyển sang dạng "date" bạn ạ.Cách xử lý của bạn là gì thì có thể đưa lên cho mọi người tham khảo.
Tôi mạn phép đưa cách giải quyết của tôi bằng code VBA
PHP:Sub TimeTable() Dim sArr(), Res() Dim lR As Long, Rw As Long, col As Integer Dim iR As Long, R As Long, iC As Integer, J As Long, K As Long 'Dong cuoi cung co du lieu lR = Sheet1.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row 'Mang 2 chieu chua toan bo du lieu goc sArr() = Sheet1.Range("A3:S" & (lR + 10)).Value 'Luu y tang them 1 cot va 10 dong 'So luong dong (can tren chieu thu nhat) Rw = UBound(sArr, 1) 'So luong cot (can tren chieu thu hai) col = UBound(sArr, 2) 'Quy dinh kich thuoc mang ket qua ReDim Res(1 To 10000, 1 To 5) 'Chay vong lap qua tung vung thu theo dong For iR = 3 To Rw If Len(sArr(iR, 1)) Then 'Truong hop co thong tin Thu 2/3/4/.../7 'Vong lap qua tung vung Khoi theo cot For iC = 2 To col If sArr(1, iC) = "Ti" & ChrW(7871) & "t" Then 'Chon dung cot de phan chia cac Khoi 'Chay vong lap qua tung lop J = 1 Do Until sArr(2, iC + J) = "" 'Truong hop co thong tin Lop 6/1;6/2,... 'Chay vong lap qua tung dong cua tung Thu 2/3/4 For R = 1 To 20 Step 2 If Len(sArr(iR + R - 1, iC + J)) Then 'Truong hop co thong tin mon hoc K = K + 1 Res(K, 1) = sArr(iR, 1) 'Thu 2/3/4.../7 Res(K, 2) = sArr(iR + R - 1, iC) 'Tiet Res(K, 3) = sArr(2, iC + J) 'Lop 6/1;6/2;... Res(K, 4) = sArr(iR + R - 1, iC + J) 'Mon hoc Res(K, 5) = sArr(iR + R, iC + J) 'Giao vien End If Next R J = J + 1 Loop End If Next iC End If Next iR 'Xoa du lieu cu Sheet2.UsedRange.Offset(1).ClearContents 'Dien ket qua Sheet2.Range("A2").Resize(K, 5) = Res 'Thong bao ket qua MsgBox "Done", vbInformation, "Daily Excel" End Sub
Cái này không khó, bạn thử xem luôn xem saoCode chuẩn nhưng chắc phải thêm định dạng "lớp". Vì mình chạy nó chuyển sang dạng "date" bạn ạ.
bạn có thể tham khảo file này, khá giống với yêu cầu của bạn, muốn tách thời khóa biểu giáo viên hay lớp gì cũng đượcBác nào hỗ trợ em lọc dữ liệu dùm em theo bảng như hình, chứ cứ mỗi lần nhìn cái file là em choáng hết cả đầu sợ nhìn nhằm lắmView attachment 283351