Lọc từ Thời khóa biểu chung ra Thời khóa biểu cá nhân cho từng Giáo viên

Liên hệ QC

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia
5/5/09
Bài viết
12,125
Được thích
17,583
Giới tính
Nam
Tôi có 1 Sheet Thời Khóa biểu chung, trong đó có 1 TKB Sáng và 1 TKB chiều, tôi muốn lọc sang Sheet TKB cá nhân cho từng Giáo viên, phải làm thế nào cho gọn nhất mà không dùng VBA, xin các Bạn trợ giúp.
Cảm ơn các Bạn.
Gởi kèm File mẫu.
 
Lần chỉnh sửa cuối:
Chẳng biết Mod làm ăn như thế nào nữa. Hai Topic giống nhau, xóa bớt 1 topic là đúng rồi. Nhưng ko xóa Topic chưa ai trả lời mà lại xóa Topic mà vấn đề đã được giải quyết. Rõ chán...
 
Bài toán thật tuyệt, nhiều hàm tôi chưa từng sử dụng và cũng chẳng hiểu. Cảm ơn Bạn huuthang_bd nhiều. Xin hỏi thêm, Bạn dùng "Tiet" trong bài toán này, "Tiet" là gì, tôi dùng Office 2003, tìm name cũng không có, nhờ Bạn "Đưa sãi thì đưa đến Tây phương". Cảm ơn.
-----------
Tôi đã tìm được Tiet = OFFSET(IF('TKB ca nhan'!S$4="S";'TKB chung'!$C$4;'TKB chung'!$C$39);'TKB ca nhan'!$A54+(IF('TKB ca nhan'!S$3="";'TKB ca nhan'!R$3;'TKB ca nhan'!S$3)-2)*5;;;17) trong define name. Cảm ơn Bạn.
 
Lần chỉnh sửa cuối:
Thêm 1 lựa chọn cho bạn

Mình biếu thêm cho bạn macro lập danh sách giáo viên trong trường luôn trong nớ đó nha! :-=

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 On Error GoTo Loi_WC
 If Not Intersect(Target, [B2]) Is Nothing Then
   Dim Sh As Worksheet
   Dim Rng As Range, sRng As Range, cRng As Range
   Dim MyAdd As String
   Dim Col As Byte
   Dim Rw As Long, sRw As Long
   
   Set Sh = Sheets("TKB chung")
   Set Rng = Union(Sh.Range("c5:s34"), Sh.Range("c40:o43"), Sh.Range("c45:o69"))
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlPart)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address:            Union(Range("C5:M9"), Range("B6:B9")).ClearContents
      Do
         sRw = sRng.Row
         Rw = 4 + Sh.Cells(sRw, "B")
         
         If sRng.Row < 35 Then
            Col = Switch(sRw < 10, 2, sRw < 15, 4, sRw < 19, 6, sRw < 24, 8, sRw < 29, 10, sRw < 35, 12)
            Cells(Rw, Col).Value = Sh.Cells(4, sRng.Column)
         Else
            Col = Switch(sRw < 45, 3, sRw < 50, 5, sRw < 55, 7, sRw < 60, 9, sRw < 65, 11, sRw < 70, 13)
            Cells(Rw, Col).Value = Sh.Cells(39, sRng.Column)
         End If
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 End If
Err_WC:                             Exit Sub
Loi_WC:
   MsgBox sRng.Address:             Resume Err_WC
End Sub
 

File đính kèm

  • GPE.rar
    16.5 KB · Đọc: 300
Cảm ơn Bạn HYen17.
Thú thật tôi không biết tí gì về Macro hay Code. Sau này sẽ liên hệ riêng với Bạn để học hỏi thêm, mong Bạn sẵn lòng hướng dẫn.
Riêng trong Bảng TKBieu.xls, GV AV1 tiết 5 sáng thứ Tư lớp 12X2 đã bị chuyển sang tiết 5 sáng thứ Năm, thiếu mất tiết 5 sáng thứ Sáu lớp 12X1(T), thiếu các ký tự phụ như (x), (T), (S) trong các tiết - Tất cả vấn đề này tôi không hiểu để tự điều chỉnh, Mong Bạn chỉnh lại cho hoàn chỉnh luôn giúp tôi làm tài liệu tham khảo lâu dài.
Chào thân mến.
 
(1) Đúng là còn sai tại dòng lệnh 15, như dưới đây đã sửa

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 On Error GoTo Loi_WC
 If Not Intersect(Target, [B2]) Is Nothing Then
   Dim Sh As Worksheet:                   Dim sRw As Long, Rw As Long
   Dim Rng As Range, sRng As Range, cRng As Range
   Dim MyAdd As String:                   Dim Col As Byte
      
   Set Sh = Sheets("TKB chung")
   Set Rng = Union(Sh.Range("c5:s34"), Sh.Range("c40:o43"), Sh.Range("c45:o69"))
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlPart)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Union(Range("C5:M9"), Range("B6:B9")).ClearContents
      Do
         sRw = sRng.Row:                  Rw = 4 + Sh.Cells(sRw, "B")
         If sRw < 35 Then
15            Col = Switch(sRw < 10, 2, sRw < 15, 4, sRw < 20, 6, sRw < 25, 8, _
               sRw < 30, 10, sRw < 35, 12)
         Else
            Col = Switch(sRw < 45, 3, sRw < 50, 5, sRw < 55, 7, sRw < 60, 9, _
               sRw < 65, 11, sRw < 70, 13)
         End If
         Cells(Rw, Col).Value = Sh.Cells(IIf(sRw < 35, 4, 39), sRng.Column)
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 End If
Err_WC:                                   Exit Sub
Loi_WC:
   MsgBox sRng.Address:                   Resume Err_WC
End Sub
(2)
thiếu các ký tự phụ như (x), (T), (S) trong các tiết - Tất cả vấn đề này tôi không hiểu để tự điều chỉnh,
Macro lấy tên lớp ở dòng 4 & 39; Đương nhiên trong dòng này không chứa ký tự phụ rồi!

Nếu bạn muốn có những ký tự phụ này, nên nói rõ tại sao nó được thêm để có thể viết tiếp 1 macro nữa cho bạn mà thôi!
(Hiện giờ mình mới hiểu chữ 'T' (tiếp ?)) các chữ x & S chưa rõ
 
Các ghi chú về mã phụ (ký tự thứ tư) tôi đã ghi trong bảng đăng đầu tiên, ví dụ: Bạn dạy môn Tiêng Anh có mã là AV1, AV1x là Bạn dạy tăng tiết, AV1T là bạn dạy tiết tự chọn, AV1S là bạn lên lớp tiết Sinh hoạt chủ nhiệm, ... vì thế, trong thời khóa biểu cá nhân phải lọc rõ từng tiết loại nào cho GV biết mà lên lớp đúng qui định. Nhờ Bạn căn cứ vào các ký tự phụ mà viết code, Cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Xong các iêu cầu rồi đây

Các ghi chú về mã phụ (ký tự thứ tư) tôi đã ghi trong bảng đăng đầu tiên
À do không đọc được, nên mình đã xóa mất tiêu từ đầu rồi! --=0

Còn đây là Macro cuối cùng của bạn, hãy chép đè lên cái cũ & chạy nha:

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 On Error GoTo Loi_WC
 If Not Intersect(Target, [B2]) Is Nothing Then
   Dim Sh As Worksheet:                   Dim sRw As Long, Rw As Long
   Dim Rng As Range, sRng As Range, cRng As Range
   Dim MyAdd As String:                   Dim Col As Byte
      
   Set Sh = Sheets("TKB chung")
   Set Rng = Union(Sh.Range("c5:s34"), Sh.Range("c40:o43"), Sh.Range("c45:o69"))
   Set sRng = Rng.Find(Target.Value, , xlFormulas, xlPart)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Union(Range("C5:M9"), Range("B6:B9")).ClearContents
      Do
         sRw = sRng.Row:                  Rw = 4 + Sh.Cells(sRw, "B")
         Col = Switch(sRw < 10, 2, sRw < 15, 4, sRw < 20, 6, sRw < 25, 8, _
               sRw < 30, 10, sRw < 35, 12, sRw < 45, 3, sRw < 50, 5, sRw < 55, _
               7, sRw < 60, 9, sRw < 65, 11, sRw < 70, 13)
         Cells(Rw, Col).Value = Sh.Cells(IIf(sRw < 35, 4, 39), sRng.Column) & _
            IIf(Len(sRng.Value) = 4, "(" & Right(sRng.Value, 1) & ")", "")
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 End If
Err_WC:                                   Exit Sub
Loi_WC:
   MsgBox sRng.Address:                   Resume Err_WC
End Sub
 
Đã chạy đúng như ý rồi, làm mất nhiều thời gian của Bạn.
Cảm ơn HYen17, Chúc Bạn vui, khỏe.
 
Làm chi cho mệt. Cái nào không có hoặc có mà sử dụng không tốt thì mình còn nghiên cứu. Chứ cái chuyện Thời khóa biểu thì theo mình chỉ cần sử dụng Smart Scheduler 4.2 của anh Hoàng Cường là ok nhất. Gần như là các bác muốn thế nào cũng được tất. Đang sử dụng, phải nói là tuyệt vời. Còn bản quyền phần mềm thì không thành vấn đề.

Vào đây xem nè các bác ạ: http://hoanggia.org/Products/SS.aspx
 
Làm chi cho mệt. Cái nào không có hoặc có mà sử dụng không tốt thì mình còn nghiên cứu. Chứ cái chuyện Thời khóa biểu thì theo mình chỉ cần sử dụng Smart Scheduler 4.2 của anh Hoàng Cường là ok nhất. Gần như là các bác muốn thế nào cũng được tất. Đang sử dụng, phải nói là tuyệt vời. Còn bản quyền phần mềm thì không thành vấn đề.

Vào đây xem nè các bác ạ: http://hoanggia.org/Products/SS.aspx
Vấn đề ở đây không chỉ là ứng dụng mà là học hỏi.
Cảm ơn Bạn HYen17.
Thú thật tôi không biết tí gì về Macro hay Code. Sau này sẽ liên hệ riêng với Bạn để học hỏi thêm, mong Bạn sẵn lòng hướng dẫn.
Riêng trong Bảng TKBieu.xls, GV AV1 tiết 5 sáng thứ Tư lớp 12X2 đã bị chuyển sang tiết 5 sáng thứ Năm, thiếu mất tiết 5 sáng thứ Sáu lớp 12X1(T), thiếu các ký tự phụ như (x), (T), (S) trong các tiết - Tất cả vấn đề này tôi không hiểu để tự điều chỉnh, Mong Bạn chỉnh lại cho hoàn chỉnh luôn giúp tôi làm tài liệu tham khảo lâu dài.
Chào thân mến.
Có thể có một chương trình nào khác hay hơn, hữu dụng hơn nhưng khi gặp một vấn đề khác bạn có thể tự giải quyết không?? Ngược lại, những người thích nghiên cứu, ham học hỏi có lẽ sẽ tìm ra được giải pháp đấy.
 
Vô cùng xúc động với ý kiến của Bạn huuthang_bd. Cùng 1 vấn nhưng có thể có nhiều cách giải quyết khác nhau, đánh giá "Hay" hay "Không hay" tùy từng người. Sau khi Bạn huuthang_bd hướng dẫn sử dụng các hàm, Bạn HYen17 hướng dẫn dùng Code, thật sự tôi như người mù được sáng mắt, không phải có sẵn cứ dùng, dầu sao thì dùng sản phẩm của chính tâm huyết mình tạo ra vẫn thấy "đã đã" hơn chứ. Dầu là chưa hoàn thiện thì cố học hỏi thêm để sửa chữa. Trân trọng.
 
Này bạn ơi!
Khi viết code VBA trong Excel, mình mong bạn hãy có những dòng chú thích để mọi người (kể cả dân A MA TƠ ) cũng có thể hiểu được, vận dụng được và xem như đó là một bài học bổ ích.
 
Này bạn ơi! Khi viết code VBA trong Excel, mình mong bạn hãy có những dòng chú thích để mọi người (kể cả dân A MA TƠ ) cũng có thể hiểu được, vận dụng được. . .

Trong BOX lập trình có Trung tâm giải thích Code; Bạn chưa rõ các dòng lệnh nào, hãy đem đến đó đặt vấn đề, Sẽ có người giải cho bạn;

( & bạn cũng thấy rằng code cũng giải thích thì trên diễn đàn cũng có nhiều người sẽ không thích vậy đâu!
Bạn cũng có thể yêu cầu giải thích dòng lệnh cụ thể trong macro nào đó ở 1 bài cụ thể nào đó mà thôi;
 
Phần mềm này chi phí cụ thể như thế nào hả Pác?
 
Web KT
Back
Top Bottom