Nhờ các bạn giúp lọc dữ liệu

Liên hệ QC

Vương Đình An

Thành viên mới
Tham gia
13/9/20
Bài viết
16
Được thích
1
Mình có 1 file excel TKB đã có dữ liệu, mình muốn lọc giá trị duy nhất các thầy cô dạy trong tuần để làm lương. Mình muốn lọc sang sheet khác. Vì trường minh là trường tư nên giáo viên thay đổi hàng tuần, nên mình muốn ds giáo viên sẽ tự động cập nhật nếu có sự thay đổi.
Cảm ơn mọi người.
 

File đính kèm

Mình có 1 file excel TKB đã có dữ liệu, mình muốn lọc giá trị duy nhất các thầy cô dạy trong tuần để làm lương. Mình muốn lọc sang sheet khác. Vì trường minh là trường tư nên giáo viên thay đổi hàng tuần, nên mình muốn ds giáo viên sẽ tự động cập nhật nếu có sự thay đổi.
Cảm ơn mọi người.
Bạn muốn tự động kiểu thế nào?
 
Mình có 1 file excel TKB đã có dữ liệu, mình muốn lọc giá trị duy nhất các thầy cô dạy trong tuần để làm lương. Mình muốn lọc sang sheet khác. Vì trường minh là trường tư nên giáo viên thay đổi hàng tuần, nên mình muốn ds giáo viên sẽ tự động cập nhật nếu có sự thay đổi.
Cảm ơn mọi người.
Thử dùng code này xem sao.
Mã:
Sub LocGV()
Dim i&, j&, k&, t&, Lr&, Lc&
Dim Arr(), KQ(), Dic As Object, Ws As Worksheet
Set Dic = CreateObject("Scripting.Dictionary")

With Sheets("TKB_T10")
Lr = .Cells(Rows.Count, 2).End(xlUp).Row + 5
Arr = .Range("B20:T" & Lr).Value
End With
ReDim KQ(1 To UBound(Arr), 1 To 3)
n = UBound(Arr) / 35
For i = 1 To n
    For j = (i * 35) - 34 To i * 35
        For k = 1 To UBound(Arr, 2)
            If Arr(j, k) <> "" Then
                If Len(Trim(Arr(j, k))) > 2 Then
                    keys = Arr(j, k)
                    If Not Dic.Exists(keys) Then
                        t = t + 1
                        Dic.Add (keys), t
                        Temp = Split(keys, "-")
                        KQ(t, 1) = t
                        KQ(t, 2) = Temp(1)
                        KQ(t, 3) = Temp(0)
                    End If
                End If
            End If
        Next k
    Next j
    Set Ws = Sheets.Add(After:=Sheets(Worksheets.Count))
        Ws.[A1] = "TT"
        Ws.[B1] = "Ho và tên"
        Ws.[C1] = "GV môn"
        Ws.[A2].Resize(t, 3) = KQ
        Ws.Name = "T" & i
Next i
Set Dic = Nothing
        MsgBox "Xong"
End Sub
Hãy nhấn nút RUN và xem kết quả
 

File đính kèm

Thử dùng code này xem sao.
Mã:
Sub LocGV()
Dim i&, j&, k&, t&, Lr&, Lc&
Dim Arr(), KQ(), Dic As Object, Ws As Worksheet
Set Dic = CreateObject("Scripting.Dictionary")

With Sheets("TKB_T10")
Lr = .Cells(Rows.Count, 2).End(xlUp).Row + 5
Arr = .Range("B20:T" & Lr).Value
End With
ReDim KQ(1 To UBound(Arr), 1 To 3)
n = UBound(Arr) / 35
For i = 1 To n
    For j = (i * 35) - 34 To i * 35
        For k = 1 To UBound(Arr, 2)
            If Arr(j, k) <> "" Then
                If Len(Trim(Arr(j, k))) > 2 Then
                    keys = Arr(j, k)
                    If Not Dic.Exists(keys) Then
                        t = t + 1
                        Dic.Add (keys), t
                        Temp = Split(keys, "-")
                        KQ(t, 1) = t
                        KQ(t, 2) = Temp(1)
                        KQ(t, 3) = Temp(0)
                    End If
                End If
            End If
        Next k
    Next j
    Set Ws = Sheets.Add(After:=Sheets(Worksheets.Count))
        Ws.[A1] = "TT"
        Ws.[B1] = "Ho và tên"
        Ws.[C1] = "GV môn"
        Ws.[A2].Resize(t, 3) = KQ
        Ws.Name = "T" & i
Next i
Set Dic = Nothing
        MsgBox "Xong"
End Sub
Hãy nhấn nút RUN và xem kết quả
Mình không biết gì về VBA, bạn chỉ rõ hơn được không?
Bài đã được tự động gộp:

Mình không biết gì về VBA, bạn chỉ rõ hơn được không?
Cảm ơn bạn nhiều! Mình làm theo hướng dẫn và được rồi, nhưng ý mình chỉ cần lấy giá trị cả ô chứ không cần tách tên và môn. Ví dụ: "CN - Huyền". Mình thử thay 1 giáo viên khác vào thì thấy chưa cập nhật bạn à?
 
Lần chỉnh sửa cuối:
Trong bảng có 45 giáo viên dạy trong tuần, mình muốn tạo 1 cột mới gồm có 45 giáo viên này nhưng tuần sau trong TKB có sự thay đổi giáo viên thì cột danh sách giáo viên dạy sẽ tự động cập nhật.
Cám ơn bạn!
Trước tiên bấm nút để lấy DS giáo viên cái đã. Chuyện tự động tính sau.
 

File đính kèm

Mình không biết gì về VBA, bạn chỉ rõ hơn được không?
Bài đã được tự động gộp:


Cảm ơn bạn nhiều! Mình làm theo hướng dẫn và được rồi, nhưng ý mình chỉ cần lấy giá trị cả ô chứ không cần tách tên và môn. Ví dụ: "CN - Huyền". Mình thử thay 1 giáo viên khác vào thì thấy chưa cập nhật bạn à?
Đây mói là code để lấy tên GV ở các tuần đưa và Sh tuần tương ứng thôi.
1/ Có phải quy trình bạn làm là :
a)Sau khi kết thúc Tuần 1 Bạn lấy tên GV dạy ở tuần 1 gán vào Sh T1 ==> tính lương.
Sau tuần các tuần khác cũng làm như vậy.
HAY LÀ:
b) Sau khi kết thúc tháng Bạn mới lấy tên GV dạy ở các tuần để gán vào Sh các tuần tương ứng. ....==> tính lương.
Bạn nên cho biết rõ thì dễ viết code theo đúng ý bạn. tránh tình trạng phát sinh phải viết lại hoặc sửa code.
VD: Nếu theo cách a thì code chỉ xác định lấy tên GV đã dạy của tuần đó. các tuần trước đã lấy sẽ không lấy nữa. Nếu theo cách b thì như code đã gửi cho bạn. Như vậy mỗi quy trình sẽ phải nghiên cứu để có code phù hợp, tối ưu.
2/ Cũng như vậy thì bạn muốn thay đổi GV ở đâu? trên TKB Tuần nào hay thay bất kỳ ở tuần nào đó thì cũng cập nhật ở Sh tuần tương ứng. Cứ mỗi một thay đổi như vậy sẽ phải chạy code lại một lần để cập nhật lại Dic. Rồi từ đó mới cập nhật cho các Sh tuần tương ứng.
Trước hết bạn hãy trả lời cho vấn đề 1 cụ thể rồi tính tiếp.
P/S: Code đã gửi cho bạn nếu cần thiết có thể thống kê luôn là số tiết trong tuần đã dạy của từng GV.
 

File đính kèm

Trong bảng có 45 giáo viên dạy trong tuần, mình muốn tạo 1 cột mới gồm có 45 giáo viên này nhưng tuần sau trong TKB có sự thay đổi giáo viên thì cột danh sách giáo viên dạy sẽ tự động cập nhật.
Cám ơn bạn!

Bạn có thể lấy danh sách giáo viên từ sheet thời khóa biểu bằng cách dùng Pivot Table (tận dụng timeline và Refresh All của Pivot để nạp lại dữ liệu khi thay đổi) và kết hợp Copy > Paste value rồi click Remove Duplicate là sẽ có 1 danh sách. Bạn xem file nhé (mình lọc ra 46 chứ không phải 45, bạn xem lại có giáo viên nào trùng tên hoặc kiêm dạy môn nào thêm không).TKB_DSGV.JPG
 

File đính kèm

Còn đây là khi đã có đủ 6 ngày dạy, đủ 30 dòng tiết học thì tự động lấy danh sách.
Cám ơn bạn nhiều vì đã giúp, bản chất công việc của mình là tính lương theo tháng, tháng được gán theo tuần có thể 4 tuần hoặc 5 tuần (có thể tràn sang cả tháng tiếp theo). Lương được tính bằng số tiết/tháng * tiền thù lao/tiết. Trước mình dùng hàm countif để đếm, nhưng có vẻ vẫn phải làm thủ công nhiều nên mình đưa lên Diễn đàn nhờ các bạn giúp xem có cách nào hay hơn không? Mình gửi file tính lương để bạn rõ hơn và góp ý để việc tính lương đơn giản và dễ hiểu hơn cho GV kiểm soát.
Trân trọng cảm ơn bạn!
Bài đã được tự động gộp:

Bạn có thể lấy danh sách giáo viên từ sheet thời khóa biểu bằng cách dùng Pivot Table (tận dụng timeline và Refresh All của Pivot để nạp lại dữ liệu khi thay đổi) và kết hợp Copy > Paste value rồi click Remove Duplicate là sẽ có 1 danh sách. Bạn xem file nhé (mình lọc ra 46 chứ không phải 45, bạn xem lại có giáo viên nào trùng tên hoặc kiêm dạy môn nào thêm không).View attachment 267562
Đúng rồi bạn có 2 giáo viên dạy 2 môn cơ, để mình xem. Cám ơn bạn!
 

File đính kèm

Bạn có thể lấy danh sách giáo viên từ sheet thời khóa biểu bằng cách dùng Pivot Table (tận dụng timeline và Refresh All của Pivot để nạp lại dữ liệu khi thay đổi) và kết hợp Copy > Paste value rồi click Remove Duplicate là sẽ có 1 danh sách. Bạn xem file nhé (mình lọc ra 46 chứ không phải 45, bạn xem lại có giáo viên nào trùng tên hoặc kiêm dạy môn nào thêm không).View attachment 267562
Cách dùng pivot đơn giản, dễ hiểu hơn bạn nhỉ? Có cách nào để đưa 1 lần 19 lớp vào trường row không bạn? và tạo timeline như thế nào bạn ơi?
 
Cách dùng pivot đơn giản, dễ hiểu hơn bạn nhỉ? Có cách nào để đưa 1 lần 19 lớp vào trường row không bạn? và tạo timeline như thế nào bạn ơi?
Học Pivot thì bạn xem tài liệu có trên diễn đàn rồi áp dụng thôi. Tài liệu của thầy Ptm0412 chỉ rất chi tiết
Trong file để timeline được thì sheet thời khóa biểu cột ngày tháng (cột A) bạn bỏ merge và đặt công thức hiện ngày tháng cho từng dòng)
A5=IF(MOD(ROW();5)=0;DATE($H$2;$F$2;(ROW()/5));A4)
rồi Fill cho các hàng bên dưới (trình bày lại cho đẹp thì kết hợp Formating Conditional để tô Font chữ trắng cho những hàng không chia hết cho 5).
 
Cám ơn bạn nhiều vì đã giúp, bản chất công việc của mình là tính lương theo tháng, tháng được gán theo tuần có thể 4 tuần hoặc 5 tuần (có thể tràn sang cả tháng tiếp theo). Lương được tính bằng số tiết/tháng * tiền thù lao/tiết.
Tính lương theo tháng mà đưa lên là lấy danh sách giáo viên dạy theo tuần??? làm tôi và Anh MaiKa8008 nhầm tưởng.
Tại sao không là lấy danh sách Gv dạy trong tháng và số tiết đã dạy trong tháng đó (Có thể là 4-5 tuần/tháng).
Hy vọng bài này sẽ dài dài do yêu cầu nhỏ giọt.
Ngóng.
 
Làm bằng công thức không quá 3 phút:

Dùng COUNTIF()

Mỗi tháng chọn lại vùng dữ liệu chỉ có 1 lần.

Giáo viên nào không dạy, số tiết bằng 0 thì ẩn dòng đó.

.
 
Cám ơn bạn nhiều vì đã giúp, bản chất công việc của mình là tính lương theo tháng, tháng được gán theo tuần có thể 4 tuần hoặc 5 tuần (có thể tràn sang cả tháng tiếp theo). Lương được tính bằng số tiết/tháng * tiền thù lao/tiết. Trước mình dùng hàm countif để đếm, nhưng có vẻ vẫn phải làm thủ công nhiều nên mình đưa lên Diễn đàn nhờ các bạn giúp xem có cách nào hay hơn không? Mình gửi file tính lương để bạn rõ hơn và góp ý để việc tính lương đơn giản và dễ hiểu hơn cho GV kiểm soát.
Trân trọng cảm ơn bạn!
Bài đã được tự động gộp:


Đúng rồi bạn có 2 giáo viên dạy 2 môn cơ, để mình xem. Cám ơn bạn!
Bạn ơi, sao khi mình làm việc với file khác bảng pivot không hiển thị tên giáo viên trên cùng 1 cột A bạn nhỉ? chỉ mình với.
Bài đã được tự động gộp:

Tính lương theo tháng mà đưa lên là lấy danh sách giáo viên dạy theo tuần??? làm tôi và Anh MaiKa8008 nhầm tưởng.
Tại sao không là lấy danh sách Gv dạy trong tháng và số tiết đã dạy trong tháng đó (Có thể là 4-5 tuần/tháng).
Hy vọng bài này sẽ dài dài do yêu cầu nhỏ giọt.
Ngóng.
Không phải vậy đâu, mình nghĩ rằng đưa tuần lên cho đỡ phức tạp. Khi mình làm sẽ ngoại suy ra tháng thôi. Bạn thông cảm!
Bài đã được tự động gộp:

Làm bằng công thức không quá 3 phút:

Dùng COUNTIF()

Mỗi tháng chọn lại vùng dữ liệu chỉ có 1 lần.

Giáo viên nào không dạy, số tiết bằng 0 thì ẩn dòng đó.

.
Mình cũng đang sử dụng countif, giáo viên không dạy sẽ không có tên trên TKB nên sẽ không có số tiết bằng 0. Vấn đề là mình muốn lập ds giáo viên dạy một cách nhanh nhất thôi (vì giáo viên thay đổi thường xuyên nên không áp dụng cho các tháng được).
 
Lần chỉnh sửa cuối:
Bạn có thể lấy danh sách giáo viên từ sheet thời khóa biểu bằng cách dùng Pivot Table (tận dụng timeline và Refresh All của Pivot để nạp lại dữ liệu khi thay đổi) và kết hợp Copy > Paste value rồi click Remove Duplicate là sẽ có 1 danh sách. Bạn xem file nhé (mình lọc ra 46 chứ không phải 45, bạn xem lại có giáo viên nào trùng tên hoặc kiêm dạy môn nào thêm không).View attachment 267562
Cho mình hỏi mấy câu nhé:
1. Tại sao có file sắp xếp tên giáo viên dạy chỉ trong cột A, có file lại sắp xếp sang các cột khác?
2. Thứ tự xuất hiện theo dòng như trên là theo quy luật nào bạn nhỉ?
3. Sao mình không chèn được Timeline? 1634024372770.png
 
Cho mình hỏi mấy câu nhé:
1. Tại sao có file sắp xếp tên giáo viên dạy chỉ trong cột A, có file lại sắp xếp sang các cột khác?
2. Thứ tự xuất hiện theo dòng như trên là theo quy luật nào bạn nhỉ?
3. Sao mình không chèn được Timeline?

1. Tại Tab Design > click Report Layout > Chọn Show in compact form để gom vào 1 cột (bạn thử các mục khác để xem cách trình bày thay đổi thế nào)
2. Mục đích là chỉ gom tên GV vào 1 cột dùng cho Remove Duplicate thôi, không cần quan tâm dòng nhóm theo quy luật gì (bạn format lại cột A canh lề trái nhìn cho thẳng hàng)
3. Để dùng Timeline thì mình đã giải thích ở #12 rồi. Cột ngày tháng tại sheet dữ liệu phải đúng kiểu Date tại từng dòng dữ liệu.
 
Lần chỉnh sửa cuối:
Web KT

Bài viết mới nhất

Back
Top Bottom