Đúng rồi đó Bạn Nghĩa ah! mình muốn dùng Macro, điều kiện lọc là nếu Bộ môn là CNOTO ở bảng TRUONG thì được chuyển qua bảng 1 (CNOTO) còn cột thì giống nhau (form mẫu như nhau) gồm tất cả các cột từ TT cho đến Chủ nhật.
cảm ơn bạn!
Nguồn là Sheet TRUONG còn nếu bomon là CNOTO thì chép tất cả các hàng có CNOTO đó qua Sheet 1 (K.CNOTO)
Đúng rồi bạn Nghĩa a!
Tức là thế này, mình bỏ bớt nội dung để file nhẹ tải lên thôi, thực tế trong sheet tổng TRUONG có rất nhiều dữ liệu trong 1 tuần, rất nhiều môn của 6 khoa đó, sau khi mình nhập dữ liệu trong sheet tổng TRUONG rồi thì những Sheet còn lại gồm K.CNOTO, K.COKHI, ... sẽ tự động nhận dữ liệu từ sheet tổng, mục đích là 6 sheet đầu nhận dữ liệu từ sheet tổng và khóa ở đây là bomon.
Đúng rồi bạn Nghĩa a!
Tức là thế này, mình bỏ bớt nội dung để file nhẹ tải lên thôi, thực tế trong sheet tổng TRUONG có rất nhiều dữ liệu trong 1 tuần, rất nhiều môn của 6 khoa đó, sau khi mình nhập dữ liệu trong sheet tổng TRUONG rồi thì những Sheet còn lại gồm K.CNOTO, K.COKHI, ... sẽ tự động nhận dữ liệu từ sheet tổng, mục đích là 6 sheet đầu nhận dữ liệu từ sheet tổng và khóa ở đây là bomon.
File đó mình gửi lên bị thiếu cột đó rồi, bên sheet TRUONG vẫn có cột đó, nhưng chắc mình xóa nhầm, cột đó vẫn có (CH/KXH) cột đó không quan trọng, khóa vẫn là cột bomon (6 khoa đó). Khung mẫu ở các sheet giống như nhau!
Cảm ơn anh nhiều ak!
Trước tiên mình xin cảm ơn sự nhiệt tình của bạn, thật lòng cảm ơn đó.
Cách tính như sau:
Tổng số gv: cái này là số cứng nghĩa là số nhân sự của khoa (cố định)
Tổng số gv tham gia giảng dạy: là tổng số gv khoa đó giảng dạy trong tuần, nếu lặp chỉ tính 1 thôi
Tổng giờ giảng dạy trong tuần: được tính là nếu từ tiết 1-5 là 5 tiết, 6-10 là 5 tiết 11-14 là 4 tiết
Tổng số lớp được giảng dạy: là sum từ trên xuống dưới của số lớp, đếm tất cả các lớp xuất hiện trong sheet
-- Các cách tính trên nói chung không quan trọng lắm---
Một lần nữa cảm ơn bạn nhiều!
Sub TaoMaKhoa()
NGUON.Range("A2", NGUON.Range("A65536").End(xlUp)).Name = "KhoaHoc"
MsgBox "Ma khoa da duoc cap nhat!", vbInformation, "Thông báo"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Then Call LocKhoa
End Sub
Sub LocKhoa()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
Dim r As Long, KhoaID As String
KHOA.Range("A12:AA65536").ClearContents
KhoaID = KHOA.Range("C2").Value
If KhoaID = "" Then GoTo ExitSub
r = TRUONG.Range("B65536").End(xlUp).Row
If r < 8 Then MsgBox "CSDL chua duoc nhap gi ca!", vbCritical, "Thông báo": GoTo ExitSub
Dim sArray As Variant, FilterArr As Variant
Dim c As Long, h As Long, n As Long, v As Long
sArray = TRUONG.Range("B8:B" & r).Resize(, 26).Value
v = UBound(sArray): n = 1: r = 0
ReDim FilterArr(1 To v, 1 To 27)
For h = 1 To v
If sArray(h, 3) = KhoaID Then
r = r + 1: n = n + 1
FilterArr(r, 1) = n
For c = 2 To 27
FilterArr(r, c) = sArray(h, c - 1)
Next
End If
Next
If r Then
KHOA.Range("A12").Resize(r, 27).Value = FilterArr
Else
MsgBox "Ma khoa nay chua co trong CSDL!", vbInformation, "Thông báo"
End If
ExitSub:
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Chân thành cảm ơn Bạn Nghĩa!
Mình đã hiểu rồi, nhiệt tình, uy tín và tài năng.
cảm ơn bạn nhé!
Function DemKhongTrung(ByVal SrcArray As Variant) As Long
If IsArray(SrcArray) Then
Dim TmpArr, Tmp
TmpArr = SrcArray
With CreateObject("Scripting.Dictionary")
.CompareMode = vbTextCompare
For Each Tmp In TmpArr
If Not .Exists(Tmp) And Tmp <> "" Then .Add Tmp, ""
Next
DemKhongTrung = .Count
.RemoveAll
End With
Erase TmpArr
Else
DemKhongTrung = IIf(Trim(SrcArray) = "", 0, 1)
End If
End Function
Sub LocKhoa()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
Dim r As Long, KhoaID As String
KHOA.Range("A12:AA65536").ClearContents
KHOA.Range("C5:C7").ClearContents
KhoaID = KHOA.Range("C2").Value
If KhoaID = "" Then GoTo ExitSub
r = TRUONG.Range("B65536").End(xlUp).Row
If r < 8 Then MsgBox "CSDL chua duoc nhap gi ca!", vbCritical, "Thông báo": GoTo ExitSub
Dim sArray As Variant, FilterArr As Variant
Dim c As Long, h As Long, n As Long, v As Long, Cnt As Long
Dim ArrItem, CalItem, Itm
sArray = TRUONG.Range("B8:B" & r).Resize(, 26).Value
v = UBound(sArray): n = 1: r = 0: Cnt = 0
On Error Resume Next
ReDim FilterArr(1 To v, 1 To 27)
For h = 1 To v
If sArray(h, 3) = KhoaID Then
r = r + 1: n = n + 1
FilterArr(r, 1) = n
For c = 2 To 27
ArrItem = sArray(h, c - 1)
FilterArr(r, c) = ArrItem
If c > 6 And Len(Trim(ArrItem)) > 0 Then
CalItem = Trim(ArrItem)
Itm = Left(CalItem, InStr(CalItem, "(") - 1)
Cnt = Cnt + Abs(Evaluate(Replace(CalItem, Itm, ""))) + 1
End If
Next
End If
Next
If r Then
KHOA.Range("A12").Resize(r, 27).Value = FilterArr
KHOA.Range("C5").Value = DemKhongTrung(KHOA.Range("C12:C" & 11 + r))
KHOA.Range("C6") = Cnt
KHOA.Range("C7") = r
Else
MsgBox "Ma khoa nay chua co trong CSDL!", vbInformation, "Thông báo"
End If
ExitSub:
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
Tuyệt vời, hay quá bạn Nghĩa ơi! phải nói quá tuyệt vời, đúng là trong excel còn nhiều cái chúng ta chưa khai thác hết/
Cực hay!
1) --Ah! nếu mình muốn lấy luôn Ô tô màu của bảng tổng sang Sheet KHOA có được không?
2) --Và tổng số giáo viên thì tùy mỗi KHOA sẽ có số giáo viên khác nhau, vd: CNOTO: 14, COKHI:11,...
3) --Bạn có thể khởi tạo NGUỒN, khi nhập Họ và tên giáo viên thì Ô KHOA bên cạnh sẽ tự động điền không? ví dụ: khi gõ NGUYỄN HOÀNG THUYẾT thì Ô của cột KHOA sẽ tự biết là CNOTO
Cảm ơn bạn!