Code nhập ngày trực theo ngày nghỉ ? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nqdn2010

Optimal Сasual Dating - Actual Girls
Tham gia
22/2/12
Bài viết
267
Được thích
15
Giới tính
Nam
Nghề nghiệp
Health
Tôi cần cập nhật ngày trực trong bảng chấm công theo một số yêu cầu (Trong file đính kèm). Tôi đã làm bằng công thức sau đó thực hiện copy sang tuy nhiên nó chạy ì ạch quá. Nay rất mong các thầy viết code nhập theo yêu cầu giúp tôi vượt qua "sự ì ạch" này. Cám ơn.
 

File đính kèm

Giải pháp excel

Dùng tạm fiel này đi nha bạn, trong khi chờ các cao thủ khác
 

File đính kèm

Upvote 0
- Tôi đã Test, Ngày nghỉ thì OK, còn ngày Lễ, Tết thì chưa cập nhật được.
- Nếu dòng ngày (D8:AH8) nếu Ô nào rỗng thì để trống những cột đó.
VD: tháng có 30 ngày thì Cột AH8:AH307 rỗng (không cập nhật ngày trực.
Cám ơn sự giúp đở của bạn.
 
Upvote 0
Giải pháp excel

Nhập tháng vào ô màu đỏ kiểm tra nha bạn
 

File đính kèm

Upvote 0
Minh đã test quá tuyệt, cám ơn sự giúp đỡ của bạn. Nếu có gì thắc mắc nhờ bạn giúp tiếp nhé.
Cám ơn bạn nhiều.
 
Upvote 0
Nhập tháng vào ô màu đỏ kiểm tra nha bạn
Bạn ơi Giúp mình thêm nhé, Giờ rảnh mình áp dụng vào thì phát sinh ra vấn đề sau :
- Ngày nghỉ lễ không cố định, người lập nhập vào theo tùy năm. Trong file mình gởi chỉ minh họa 4 ngày lễ số ngày lễ thực tế vượt hơn tùy theo người lập bảng nhập vào.
- Số nhân viên nhập tùy ý trong bảng mình lấy 300 nhân viên. Áp dụng thực tế có thể khác 300.
Nói tóm lại tùy vào quá trình nhập vào mà nhập ngày trực theo yêu cầu trên! Code của bạn cố định với bảng.
 
Lần chỉnh sửa cuối:
Upvote 0
Theo bạn thì có bao nhiêu ngày nghĩ lễ bạn đánh vào thử xem. và bạn cho mình biết số lượng nhân viên của bên bạn (ước chừng là khoảng bao nhiêu, ví dụ 5000 nhân viên).
 
Lần chỉnh sửa cuối:
Upvote 0
Vì số nhân viên, và ngày nghỉ tùy vào từng năm mình chưa biết trước. Nhân viên thì <=300.
VD: ngày tết nguyên đán có thể nghỉ 4 hoặc 5, . . . . Đặc thù chuyên môn, ngày nghỉ có khác với quy định chung.
Cám ơn sự quan tâm của bạn!
 
Upvote 0
Vậy là ý bạn muốn nói đến mấy ngày nghĩ theo lịch âm phải không? (ví dụ: Tết nguyên đán, lễ giỗ tổ,.....). Nếu đúng như vậy thì đợi mình làm xong rồi gửi mail cho bạn (có thể là ngày mai). vì mình còn phải add thêm âm lịch vào file mới chạy được. ok
 
Upvote 0
Vậy là ý bạn muốn nói đến mấy ngày nghĩ theo lịch âm phải không? (ví dụ: Tết nguyên đán, lễ giỗ tổ,.....). Nếu đúng như vậy thì đợi mình làm xong rồi gửi mail cho bạn (có thể là ngày mai). vì mình còn phải add thêm âm lịch vào file mới chạy được. ok
- Trước tiên cám ơn sự giúp đở nhiệt tình của bạn.
- Danh sách mình nhập tối đa là 300 nhân viên, như vậy giả sử số nhân viên thực tế là 197 thì chỉ cập nhật ngày trực là 197, còn nếu nhân viên thực tế là 250 thì cập nhật ngày trực là 250.
- Nếu phân biệt được ngày Lễ và ngày Tết thì quá tuyệt.
- Làm phiền bạn quá. Một lần nữa cám ơn bạn nhiều.
 
Upvote 0
Bạn ơi! Mình dựa vào Code của bạn chế biến một chút:
Sub XL() Range("D11:AH311").Resize(ActiveSheet.[AN1].Value).Select
Selection.FillDown
Range("D12").Select
Range(Selection, Selection.End(xlToRight)).Select
Range("D12:AH12").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("C13").Select
End Sub
AN1 = Số nhân viên nhập vào
D11 = IF(D$8="";"";IF(COUNTIF(nghile;D$8)>0;"NL";IF(OR(VLOOKUP($B11;NNN!$E$5:$J$304;3;0)>D$8;VLOOKUP($B11;NNN!$E$5:$J$304;5;0)<D$8);"x";VLOOKUP($B11;NNN!$E$5:$J$304;6;0))))
nghile = OFFSET(Sheet2!$C$5;;;COUNT(sheet2!$C:$C))
Mình đã thực hiện được bước cập nhật như ý rồi. Bạn xem hộ có trục trặc gì không bạn.
 
Upvote 0
Tuy nhiên, khi xóa tất cả ngày nghỉ ở Sheet 2 thì tiêu!
Bạn khắc phục hộ mình nhe!
 
Upvote 0
Không hiểu sao, khi nhập công thức vào cột C (Từ C5) thì hàm OFFSET(Sheet2!$C$5;;;COUNT(sheet2!$C:$C)) chỉ nhận 1 vùng giới hạn.Bạn xem giúp mình nhé.
 
Upvote 0
giải pháp excel

Bạn test lại lần nữa giúp mình tất cả các trường hợp, mình đã kiểm thấy ok, không biết còn trục trặc gì nữa không
 

File đính kèm

Upvote 0
Upvote 0
Bạn tính lại hộ mình tổng các ngày trực (Ngày lễ và tết không chính xác bạn ơi!).
Nếu nghỉ phép năm, TS, Th thì không tính ngày lễ. Tức là nếu đã nghỉ thì không tính vào ngày trực lễ.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn nói rõ cho mình 3 cột này nha:
- Số ngày thường trực: tính như thế nào?
- số ngày thứ 7, chủ nhật trực: ????
- Số ngày lễ, tết trực:??????
Bạn lấy 1 ví dụ minh họa được không?
 
Upvote 0
Bạn nói rõ cho mình 3 cột này nha:
- Số ngày thường trực: tính như thế nào?
- số ngày thứ 7, chủ nhật trực: ????
- Số ngày lễ, tết trực:??????
Bạn lấy 1 ví dụ minh họa được không?
Cám sự chia sẽ của bạn, Đơn giản thế này: Nhiễn nhiên khi ngày nghỉ sẽ không tính ngày lễ. File trước của bạn tính tổng ngày Lễ chưa chính xác.
Nếu ngày nghỉ thì không tính ngày trực lễ. Vì khi tính ngày lễ thì xem như ngày trực trong khi đó VD: nghỉ TS lại trực ngày lễ.
Đôi điều cùng bạn!
- Số ngày thường trực: là những ngày trực bình thường ngoại trừ thứ 7 và C. nhật ngày nghỉ và lễ (khi tính ưu tiên thấp nhất. . .) (kí hiệu : x)
- Số ngày thứ 7 + C.nhật trựctrong ngày thứ bảy và ngày chủ nhật bỏ ra ngày nghỉ, ngày lễ và tết. (Ưu tiên thứ 2 sau ngày thường trực).
- Ngày nghỉ Lễ, Tết là những ngày nhân viên trực vào ngày nghỉ Lễ, Tết, . . . (Khi ngày nghỉ trùng với ngày lễ thì không tính là ngày trực. VD : Chế độ Thai sản là từ ngày 1/9/2013 đến 27/2/2014 thì trong khoảng thời gian này tính là thai sản mặc dù là có ngày Lễ hoặc tết).
 
Lần chỉnh sửa cuối:
Upvote 0
Nói thật bạn nói mình hiểu chết liền đó, fiel của mình gửi bạn lấy ví dụ 1 tháng nào đó rồi chỉ ra chỗ sai của nó. ok
 
Upvote 0
Bạn ơi! xem hộ mình nhé!
Mong sự giúp đỡ của bạn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Nói thật bạn nói mình hiểu chết liền đó, fiel của mình gửi bạn lấy ví dụ 1 tháng nào đó rồi chỉ ra chỗ sai của nó. ok
-Nếu bạn đi làm bình thưởng (Tử thứ 2 => 6) ngày trực bình thường.
- Bạn Đi làm vào ngày thứ 7 + Chủ nhật => Trực ngày T.bảy + C.Nhật.
- Đi làm ngày 30/4; 1/5 ; . . . => Đi làm ngày Lễ.
- Khi bạn ngỉ phép năm (Từ ngày 20/4 => 4/5) thì ngày Lễ 30/4 và 1/5 vẫn tính là ngày nghỉ phép năm chứ không tính là ngày lễ. . . .
Đôi lời cùng bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Giải pháp excel

Bạn xem và test lại lần cuối, chỉnh theo ý của bạn đó. Có gì thì xử lý tiếp.
 

File đính kèm

Upvote 0
Mình test thử thấy rất như ý. Có gì làm phiền bạn tiếp nhe.
Cám ơn bạn nhiều!
 
Upvote 0
Trong quá trình mình test mình thấy còn một vấn đề này nữa là:
- Nếu có 2 hay 3,......người trùng cả họ,tên,họ lót: (Ví dụ: có 3 nhân viên đều có tên là: Nguyễn Văn Giàu)
Thì lúc này bạn sẽ đặt là: Nguyễn Văn Giàu ; Nguyễn Văn Giàu' ; Nguyễn Văn Giàu''
Như vậy khi lấy dữ liệu qua bảng trực mới đúng.
- Đáng nhẽ là bạn phải hoá mỗi nhân viên thành một mã thì sẽ tránh được sự trùng lấp này. Nhưng mà lỡ làm rồi, cứ để vậy mà dùng cũng chẳng sao.
 
Upvote 0
Trong quá trình mình test mình thấy còn một vấn đề này nữa là:
- Nếu có 2 hay 3,......người trùng cả họ,tên,họ lót: (Ví dụ: có 3 nhân viên đều có tên là: Nguyễn Văn Giàu)
Thì lúc này bạn sẽ đặt là: Nguyễn Văn Giàu ; Nguyễn Văn Giàu' ; Nguyễn Văn Giàu''
Như vậy khi lấy dữ liệu qua bảng trực mới đúng.
- Đáng nhẽ là bạn phải hoá mỗi nhân viên thành một mã thì sẽ tránh được sự trùng lấp này. Nhưng mà lỡ làm rồi, cứ để vậy mà dùng cũng chẳng sao.
- Mình Test thấy một điều nữa. Trong DS ở sheet2 nếu nhân viên nào không nghỉ Phép thì nó nhập vào số "0", không phải là "x", bạn xem lại hộ mình nhé.
Cám ơn bạn nhiều.
 

File đính kèm

Upvote 0
Giải pháp excel

Không biết bạn tải fiel như thế nào nữa. Bạn xoá hết tất cả các file có trong máy bạn và tải fiel này về rồi test thật kỹ một lần nữa nha.
 

File đính kèm

Upvote 0
Minh đã hiểu nguyên nhân. Do ở cột J tôi đặt công thức (J5 = IF(OR(I5="";H5="");"";H5+I5-1) ) Khi rỗng thì nó không nhận là ngày tháng. Tôi sửa lại (J5 = =IF(OR(I5="";H5="");0;H5+I5-1) ) thì OK. Tuy nhiên phải thể hiện không hiên số 0, nếu không rất xấu.
Bạn có cách khắc phục không.
Điều này không nó rõ cho bạn. Mong đừng giận nhe.
Cám ơn sự giúp đỡ của bạn.
 
Upvote 0
Excel 2003: Trên thanh Menu -> chọn tools -> option ->view -> kiếm chỗ zero values lick bỏ chọn
Excel 2007: Click vào biểu tượng tròn phía trên bên góc trái của file excel -> chọn excel option -> advanced -> kiếm Show a zero in cells that have zero values click bỏ chọn ->ok
 
Upvote 0
Ý mình, ngoài zero values click, cập nhật vẫn đúng cho Ô "" không?
 
Upvote 0
Thì vẫn đúng, mình đâdu có nói gì, rồi tiếp theo nữa bạn cần gì và muốn gì. nói cho dễ hiểu một tí, bạn cứ nói vòng vo.
 
Upvote 0
Bạn không nên để trả về rỗng , nếu vậy thì qua bên sheet chấm công nó trả về 0 không trả về "x" ok.J5 = IF(OR(I5="";H5="");"";H5+I5-1)
 
Upvote 0
Thì vẫn đúng, mình đâdu có nói gì, rồi tiếp theo nữa bạn cần gì và muốn gì. nói cho dễ hiểu một tí, bạn cứ nói vòng vo.
Ý mình khi đặt công thức tại cột J (J5 = IF(OR(I5="";H5="");"";H5+I5-1) ), thì cập nhật được "x" chứ không phải "0".
Nói chung bạn đã giúp mình đã đạt kết quả công việc rồi, tại mình tham lam quá và muốn hoàn chỉnh thật tuyệt nên làm khổ bạn; Nếu có Dịp đi Hà Tiên du lịch để minh bù đắp lại nhé.
 
Upvote 0
Theo mình thì bên sheet 2 bạn đặt công thức tại cột J5= IF(OR(I5="";H5="");0;H5+I5-1) và dùng zero values như mình hướng dẫn, đừng đặt giá trị "". Nếu đặt "" thì nó cập nhật qua sheet 1 là 0 chứ không phải "x" như mong muốn. ok
 
Upvote 0
Cám ơn bạn nhiều, để mình áp dụng vào nếu có gì lại làm phiền bạn. Thông cảm nhe.
Chúc bạn vui khỏe.
 
Upvote 0

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

Back
Top Bottom