vietanh1204
Thành viên mới
- Tham gia
- 5/2/18
- Bài viết
- 11
- Được thích
- 0
- Giới tính
- Nam
thank bác. bác hướng dẫn e làm được ko ạBạn xem thử:
thank bác. bác hướng dẫn e làm được ko ạBạn xem thử:
Bạn xem các công thức trong file kèm là hiểu mà.thank bác. bác hướng dẫn e làm được ko ạ
Em đang chưa hiểu được, ý tưởng của chỗ dùng hàm Mod như trong hình của tác giả. Để giải quyết bài toán phân ca trực này. Mong các Sư Phụ cho Em biết chỗ dụng ý dùng Mod trong bài này với ạ. Cảm ơn A/C nhiều!Bạn xem thử file này nhé. Ở đây tôi thêm vào 2 bảng để quản lý.
- Bảng Phòng, liệt kê danh sách các phòng của bạn(Mã phòng gồm 2 ký tự, cái này có liên quan đến công thức).
- Bảng Nhân viên, liệt kê danh sách các nhân viên bao gồm 1 cột là Mã phòng để biết nhân viên đó thuộc phòng nào, yêu cầu bảng này phải được sắp xếp theo mã phòng, để đảm bảo các nhân viên cùng 1 phòng sẽ nằm liên tục với nhau trong bảng Nhân viên này.
- Tại bảng lịch trực là bảng chính, tôi thêm vào 2 cột phụ, 1 cột cho biết ngày trực có phải là thứ 7 hay chủ nhật hay không. Cột thứ 2 là số thứ tự ca trực. Cột Phòng 1 và Phòng 2 là tên 2 phòng sẽ phải trực ngày hôm đó. Nếu là thứ 7 và chủ nhật thì sẽ có 2 phòng cách nhau bởi dấu "|". Cột Nhân viên 1 và Nhân viên 2 là Nhân viên phải trực tương ứng với Phòng 1 và Phòng 2, với thứ 7 và chủ nhật thì mỗi cột cũng có 2 nhân viên tương ứng với 2 phòng cách nhau bới dấu "|".
(Bạn sửa lại cho thích hợp với yêu cầu nhé)
bạn ơi, file bạn làm rất hay, mình có thể trao đổi với bạn qua zalo hoặc face để hỏi một số thắc mắc được không ạ.Bạn xem thử file này nhé. Ở đây tôi thêm vào 2 bảng để quản lý.
- Bảng Phòng, liệt kê danh sách các phòng của bạn(Mã phòng gồm 2 ký tự, cái này có liên quan đến công thức).
- Bảng Nhân viên, liệt kê danh sách các nhân viên bao gồm 1 cột là Mã phòng để biết nhân viên đó thuộc phòng nào, yêu cầu bảng này phải được sắp xếp theo mã phòng, để đảm bảo các nhân viên cùng 1 phòng sẽ nằm liên tục với nhau trong bảng Nhân viên này.
- Tại bảng lịch trực là bảng chính, tôi thêm vào 2 cột phụ, 1 cột cho biết ngày trực có phải là thứ 7 hay chủ nhật hay không. Cột thứ 2 là số thứ tự ca trực. Cột Phòng 1 và Phòng 2 là tên 2 phòng sẽ phải trực ngày hôm đó. Nếu là thứ 7 và chủ nhật thì sẽ có 2 phòng cách nhau bởi dấu "|". Cột Nhân viên 1 và Nhân viên 2 là Nhân viên phải trực tương ứng với Phòng 1 và Phòng 2, với thứ 7 và chủ nhật thì mỗi cột cũng có 2 nhân viên tương ứng với 2 phòng cách nhau bới dấu "|".
(Bạn sửa lại cho thích hợp với yêu cầu nhé)
Chào bác ạ. Nhờ bác chỉnh lại lịch này giúp em. Em phân ca vào năm 2021 thì nó không chạy. Và bác đổi nhân viên số 3 thành nhân viên số 8 giùm em ạ. Cảm ơn bác nhiều nhiều.Mình nhớ đã gởi file mới lâu rồi, không biết tại sao không thấy
Gởi bạn file chỉnh lại hợp lý hơn
Ôi, cảm ơn bác nhiều ạ. Bác chỉ thêm cho em 1 chiêu nữa là số 3 và số 4 bây giờ chạy cả xe 1,2,3 ( trước là chỉ chạy xe 3) với ạ. Phiền bác quá. Em thấy bác trả lời vào lúc hơn 2 giờ sáng nên áy náy quá.Chon ô N2, chọn menu Data, chọn Data validation, khai báo Max 2030
View attachment 250702
Chỉnh lại codeÔi, cảm ơn bác nhiều ạ. Bác chỉ thêm cho em 1 chiêu nữa là số 3 và số 4 bây giờ chạy cả xe 1,2,3 ( trước là chỉ chạy xe 3) với ạ. Phiền bác quá. Em thấy bác trả lời vào lúc hơn 2 giờ sáng nên áy náy quá.
Sub LichTruc()
Application.ScreenUpdating = False
Range("A5:I35").ClearContents
Call Ngay
Call ABC
Application.ScreenUpdating = True
End Sub
Private Sub ABC()
Dim Ngay(), Arr()
Dim sRow&, i&, j&, k
Ngay = Range("A5", Range("A100").End(3)).Value
sRow = UBound(Ngay)
ReDim Arr(1 To sRow, 1 To 6)
k = Range("N4").Value
If Not IsNumeric(k) Then k = 0 Else k = ((k - 1) Mod 7)
For i = 1 To sRow
For j = 1 To 6
If Not ((Ngay(i, 1) = "Sat" And j = 2) Or (Ngay(i, 1) = "Sun" And (j = 2 Or j = 3))) Then
If k = 7 Then k = 1 Else k = k + 1
Arr(i, j) = k
End If
Next j
Next i
Range("C5").Resize(UBound(Arr), 6) = Arr
End Sub
Private Sub Ngay()
Dim Rng As Range, i As Byte, Ngay As Date, Thang As Byte, Nam As Long
Thang = Range("N3").Value
Nam = Range("N2").Value
If Nam = vbEmpty Then Nam = Year(Now())
If Thang = vbEmpty Then Thang = 1: Range("R3") = Thang
Ngay = DateSerial(Nam, Thang, 1) - 1
Range("A5:K35").ClearContents
Set Rng = Range("A5:B35")
For i = 1 To 31
Ngay = Ngay + 1
If Month(Ngay) = Thang Then
Rng(i, 1) = Format(Weekday(Ngay), "ddd"): Rng(i, 2) = Ngay
Else
Rng(i, 1) = "": Rng(i, 2) = ""
End If
Next i
Set Rng = Nothing
End Sub
Chỉnh lại code
Mã:Sub LichTruc() Application.ScreenUpdating = False Range("A5:I35").ClearContents Call Ngay Call ABC Application.ScreenUpdating = True End Sub Private Sub ABC() Dim Ngay(), Arr() Dim sRow&, i&, j&, k Ngay = Range("A5", Range("A100").End(3)).Value sRow = UBound(Ngay) ReDim Arr(1 To sRow, 1 To 6) k = Range("N4").Value If Not IsNumeric(k) Then k = 0 Else k = ((k - 1) Mod 7) For i = 1 To sRow For j = 1 To 6 If Not ((Ngay(i, 1) = "Sat" And j = 2) Or (Ngay(i, 1) = "Sun" And (j = 2 Or j = 3))) Then If k = 7 Then k = 1 Else k = k + 1 Arr(i, j) = k End If Next j Next i Range("C5").Resize(UBound(Arr), 6) = Arr End Sub Private Sub Ngay() Dim Rng As Range, i As Byte, Ngay As Date, Thang As Byte, Nam As Long Thang = Range("N3").Value Nam = Range("N2").Value If Nam = vbEmpty Then Nam = Year(Now()) If Thang = vbEmpty Then Thang = 1: Range("R3") = Thang Ngay = DateSerial(Nam, Thang, 1) - 1 Range("A5:K35").ClearContents Set Rng = Range("A5:B35") For i = 1 To 31 Ngay = Ngay + 1 If Month(Ngay) = Thang Then Rng(i, 1) = Format(Weekday(Ngay), "ddd"): Rng(i, 2) = Ngay Else Rng(i, 1) = "": Rng(i, 2) = "" End If Next i Set Rng = Nothing End Sub
Em cảm ơn ạ. Không có nghề nhìn đúng như phim " The Matrix " luôn ạ.Chỉnh lại code
Mã:Sub LichTruc() Application.ScreenUpdating = False Range("A5:I35").ClearContents Call Ngay Call ABC Application.ScreenUpdating = True End Sub Private Sub ABC() Dim Ngay(), Arr() Dim sRow&, i&, j&, k Ngay = Range("A5", Range("A100").End(3)).Value sRow = UBound(Ngay) ReDim Arr(1 To sRow, 1 To 6) k = Range("N4").Value If Not IsNumeric(k) Then k = 0 Else k = ((k - 1) Mod 7) For i = 1 To sRow For j = 1 To 6 If Not ((Ngay(i, 1) = "Sat" And j = 2) Or (Ngay(i, 1) = "Sun" And (j = 2 Or j = 3))) Then If k = 7 Then k = 1 Else k = k + 1 Arr(i, j) = k End If Next j Next i Range("C5").Resize(UBound(Arr), 6) = Arr End Sub Private Sub Ngay() Dim Rng As Range, i As Byte, Ngay As Date, Thang As Byte, Nam As Long Thang = Range("N3").Value Nam = Range("N2").Value If Nam = vbEmpty Then Nam = Year(Now()) If Thang = vbEmpty Then Thang = 1: Range("R3") = Thang Ngay = DateSerial(Nam, Thang, 1) - 1 Range("A5:K35").ClearContents Set Rng = Range("A5:B35") For i = 1 To 31 Ngay = Ngay + 1 If Month(Ngay) = Thang Then Rng(i, 1) = Format(Weekday(Ngay), "ddd"): Rng(i, 2) = Ngay Else Rng(i, 1) = "": Rng(i, 2) = "" End If Next i Set Rng = Nothing End Sub
Thay đổi năm thế nào bác ơiBạn xem các công thức trong file kèm là hiểu mà.
Bạn xem và kiểm tra nhé.Thay đổi năm thế nào bác ơi
Mong Anh /Chị giúp tạo lịch tương tự cho 10 người hoặc hơn và lịch ngày tháng đúng theo năm nhập vào (Lịch trong file này chỉ đúng với năm 2020). Xin cám ơn và chờ tin của Anh/ChịBạn xem thử:
Anh HieuCD ơi, anh có thể giúp em vấn đề này được ko ạ?Dear các bác,
em mong muốn làm được một cái lịch trực ban cho cơ quan. bác nào làm rồi chia sẻ giúp em với!
Cơ quan em có 76 nhân viên (trong đó có 9 nhân viên nữ). Lịch trực ban phải được sắp xếp như sau:
- Mỗi ngày có 2 ca trực (ca ngày và ca đêm), mỗi ca 1 nhân viên trực.
- Nhân viên nữ chỉ trực ca ngày.
Em muốn sắp xếp lịch theo tháng xoay vòng. Mong các Pro chỉ giúp.