Cách tính ngày nghỉ phép

  • Thread starter Thread starter dknvnn
  • Ngày gửi Ngày gửi
Liên hệ QC

dknvnn

Thành viên mới
Tham gia
10/9/07
Bài viết
20
Được thích
6
Chào các bạn, mình hiện đang gặp rắc rối với cái công thức tính ngày nghỉ phép cho nhân viên, rất mong các bạn xem qua và giúp đỡ cho mình
- ô B2: là thời điểm hiện tại
- ô D6: là ngày bắt đầu làm việc
- ô G6: là số ngày nghỉ hiện tại có được

Ở đây, mình muốn lập công thức cho ô G6 với điều kiện bên dưới:

- Trong 2 tháng thử việc không có ngày nghỉ phép nào.

- 60<=a<89: được 2 ngày nghỉ (với a=B2-D6)
- 90<=a<119: được 3 ngày nghỉ
- 120<=a<150: được 4 ngày nghỉ
- 150<=a<180: được 5 ngày nghỉ
- 180<=a<210: được 6 ngày nghỉ
- 210<=a<240: được 7 ngày nghỉ
- 240<=a<270: được 8 ngày nghỉ
- 270<=a<300: được 9 ngày nghỉ
- 300<=a<330: được 10 ngày nghỉ
- 330<=a<360: được 11 ngày nghỉ
- 360<=a<730: được 12 ngày nghỉ
- 730<=a<1095: được 13 ngày nghỉ
- 1095<=a<1460: được 14 ngày nghỉ
- 1460<=a: được 15 ngày nghỉ

Sau khi ra được số ngày nghỉ, trừ với sum(G7:G18), sẽ ra được số ngày nghỉ còn lại (ô G6).

Mong các bạn chỉ cách giúp mình.

Cảm ơn rất nhiều.
 

File đính kèm

Hàm And lồng trong hàm IF của bạn là không cần thiết.
Bạn chỉ cần viết : if (ngay làm < 61;0;if(ngày làm<91;2;if(ngày làm<121;3 ....))) khi if vừa true là exit rồi
Đặt tên cho công thức trên là : NgayPhep
Ô G6 = NgayPhep - NgayDaNghi (Ngày phép còn lại )
Bạn theo hướng đó thực hành để rút kinh nghiệm còn áp dụng cho các file khác
Còn nếu không xong thì mai mình Up file lên cho
Bye
 
Hãy dùng hàm SWITCH() trong VBA thay cho mấy cái IF() kia, sẽ khả dụng hơn.

PHP:
Option Explicit
Function NgayFep(Dat1 As Date) As Byte
 Dim Dat As Date

 Dat = Date - Dat1
 NgayFep = Switch(Dat < 60, 0, Dat < 90, 2, Dat < 120, 3, Dat < 150, 4 _
   , Dat < 180, 5, Dat < 210, 6, Dat < 240, 7, Dat < 270, 8 _
   , Dat < 300, 9, Dat < 330, 10, Dat < 360, 11, Dat < 730, 12 _
   , Dat < 1095, 13, Dat < 1460, 14, Dat >= 1460, 15)

End Function
(Nó sẽ dễ bảo trì & sử dụng đó chứ? Bạn hãy Copy nó & bỏ vô cửa sổ VBA thử đi nha

Cú fáp tại [G6] sẽ là =NgayFep(D6)
 
Chào các bạn, mình hiện đang gặp rắc rối với cái công thức tính ngày nghỉ phép cho nhân viên, rất mong các bạn xem qua và giúp đỡ cho mình
- ô B2: là thời điểm hiện tại
- ô D6: là ngày bắt đầu làm việc
- ô G6: là số ngày nghỉ hiện tại có được

Ở đây, mình muốn lập công thức cho ô G6 với điều kiện bên dưới:

- Trong 2 tháng thử việc không có ngày nghỉ phép nào.

- 60<=a<89: được 2 ngày nghỉ (với a=B2-D6)
- 90<=a<119: được 3 ngày nghỉ
- 120<=a<150: được 4 ngày nghỉ
- 150<=a<180: được 5 ngày nghỉ
- 180<=a<210: được 6 ngày nghỉ
- 210<=a<240: được 7 ngày nghỉ
- 240<=a<270: được 8 ngày nghỉ
- 270<=a<300: được 9 ngày nghỉ
- 300<=a<330: được 10 ngày nghỉ
- 330<=a<360: được 11 ngày nghỉ
- 360<=a<730: được 12 ngày nghỉ
- 730<=a<1095: được 13 ngày nghỉ
- 1095<=a<1460: được 14 ngày nghỉ
- 1460<=a: được 15 ngày nghỉ

Sau khi ra được số ngày nghỉ, trừ với sum(G7:G18), sẽ ra được số ngày nghỉ còn lại (ô G6).

Mong các bạn chỉ cách giúp mình.

Cảm ơn rất nhiều.

Cái này nếu dùng hàm thì dùng Lookup hoặc Choose là gọn nhất, tôi thì dùng Lookup , Tại ô G6 dùng công thức:
PHP:
=IF(D6="","",LOOKUP($B$2-D6,{0,60,90,120,150,180,210,240,270,300,330,360,730,1095,1460},{0,2,3,4,5,6,7,8,9,10,11,12,13,14,15}))
rồi fill xuống !

Hy vọng bạn thích ?
 
to Tong Van De

mình đã thử rồi, nhưng vẫn không ra kết quả. Mình tìm hiểu trên mạng thì nó thông báo là chỉ được sử dụng tối đa là 8 hàm IF trong 1 công thức tính thôi. Bạn có cách nào khác không? Cảm ơn bạn rất nhiều.

to ChanhTQ

thật sự là mình rất gà, không biết cách nào sử dụng được hàm switch trong VBA, không biết là gì lun nữa. Bạn có thể vui lòng add lun công thức vào bảng tính dùm mình lun được không, còn không thì chỉ chi tiết hơn để mình có thể làm, cảm bậnn5 rất nhiều.
 
to Tong Van De

mình đã thử rồi, nhưng vẫn không ra kết quả. Mình tìm hiểu trên mạng thì nó thông báo là chỉ được sử dụng tối đa là 8 hàm IF trong 1 công thức tính thôi. Bạn có cách nào khác không? Cảm ơn bạn rất nhiều.

to ChanhTQ

thật sự là mình rất gà, không biết cách nào sử dụng được hàm switch trong VBA, không biết là gì lun nữa. Bạn có thể vui lòng add lun công thức vào bảng tính dùm mình lun được không, còn không thì chỉ chi tiết hơn để mình có thể làm, cảm bậnn5 rất nhiều.
Hay bạn dùng thử công thức sau.
Chưa test hết cái hàm int...
=IF(A1<61,0,IF(A1>=1460,16,IF(A1>=1095,14,IF(A1>=730,13,INT(A1/30)))))
Còn nếu nhiều hơn 7 if thì cũng có rất nhiều cách, cụ thể như: if(...,X1,0) + if(...,X2,0)...+if(...,Xn,0)
 
Hay bạn dùng thử công thức sau.
Chưa test hết cái hàm int...
=IF(A1<61,0,IF(A1>=1460,16,IF(A1>=1095,14,IF(A1>=730,13,INT(A1/30)))))
Còn nếu nhiều hơn 7 if thì cũng có rất nhiều cách, cụ thể như: if(...,X1,0) + if(...,X2,0)...+if(...,Xn,0)

Quả thực, công thức của Bác ThuNghi mới thực sự cách hay (rất thông minh), xin phép Bác sửa lại 1 chút là ngon!
PHP:
=IF(A6="","",IF($B$2-D6<60,0,IF($B$2-D6>=1460,15,IF($B$2-D6>=1095,14,IF($B$2-D6>=730,13,INT(($B$2-D6)/30))))))
 
Cái này nếu dùng hàm thì dùng Lookup hoặc Choose là gọn nhất, tôi thì dùng Lookup , Tại ô G6 dùng công thức:
PHP:
=IF(D6="","",LOOKUP($B$2-D6,{0,60,90,120,150,180,210,240,270,300,330,360,730,1095,1460},{0,2,3,4,5,6,7,8,9,10,11,12,13,14,15}))
rồi fill xuống !

Hy vọng bạn thích ?
em thì kết hơp giữa đại ca và bác thu nghi
=IF(OR(D6="",$B$2-D6<60),"",INT(MIN($B$2-D6,360)/30)+LOOKUP(($B$2-D6),{0,730,1095,1460},{0,1,2,3}))
 
Hơi bị yếu về Excel nên mạo muội đề nghị một cách:
Mình làm một cái bảng Reference, sau đó dùng hàm VLookup được không nhỉ?
VD: Bảng Ref mình có 2 cột, cột 1 mình thể hiện số ngày làm việc, cột 2 mình thể hiện số ngày nghỉ phép được hưởng:
0 0
60 2
90 3
120 4
....

Vậy khi đó mình dùng hàm VLookup thì chắc sẽ dễ dàng hơn. Mặt khác, nếu có sửa đổi gì về cách tính ngày nghỉ phép được hưởng cũng sẽ dễ bảo trì hơn
 
Hơi bị yếu về Excel nên mạo muội đề nghị một cách:
Mình làm một cái bảng Reference, sau đó dùng hàm VLookup được không nhỉ?
VD: Bảng Ref mình có 2 cột, cột 1 mình thể hiện số ngày làm việc, cột 2 mình thể hiện số ngày nghỉ phép được hưởng:
0 0
60 2
90 3
120 4

....

Vậy khi đó mình dùng hàm VLookup thì chắc sẽ dễ dàng hơn. Mặt khác, nếu có sửa đổi gì về cách tính ngày nghỉ phép được hưởng cũng sẽ dễ bảo trì hơn
nếu bạn dùng vlookup thì bạn phải làm 1460 dòng đấy lúc đó thì chính xác 100%
 
Lần chỉnh sửa cuối:
Có ai biết chỉ dùm mình công thức tính ngày nghỉ phép năm VD: nhân viên mình nghỉ tháng 4 nghỉ 3 ngày ( từ ngày 21/4 đến ngày 23/4; tháng 5 nghỉ 4 ngày ( từ ngày 12/5 đến ngày 15/5) tính làm sao để cộng dồn trong năm đó biết người đó nghỉ bao nhiêu ngày. xin cảm ơn.
nếu được xin gửi qua địa chỉ: namlykien.2007@gmail.com
 
Web KT

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

Back
Top Bottom