Code tính ngày cuối cùng!

Liên hệ QC

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi làm được code tính bao nhiêu ngày lễ, hay ngày thứ mấy trong 1 khoảng thời gian cụ thể, nhờ các bạn làm giúp 1 code như sau tính ngày hết hạn thử việc. Thấy 1 số bạn cũng có nhu cầu mà tôi không viết được.
EndDate(ngaydau,songaythuviec,ngayle)
songaythuviec = a
ngayle là range
ngaydau là date
Xin cám ơn!
Đính kèm code tính ngayle và ngaynghi (có edit)
Function songay(ngay1 As Date, ngay2 As Date, Thu As Integer) As Integer
Dim i As Integer
Dim j As Integer
Dim ThoiGian As Integer
Dim ngaycuoi As Date
Dim ngaydau As Date
If ngay1 > ngay2 Then
ngaycuoi = ngay1
ngaydau = ngay2
Else
ngaycuoi = ngay2
ngaydau = ngay1
End If
'lay hieu so ngaycuoi-ngaydau
'neu thu =0, tinh bao nhieu T7+CN
If Thu > 8 Then
MsgBox ("Ban nhap sai-nhap lai thu, thu < 8")
Exit Function
End If
ThoiGian = ngaycuoi - ngaydau
For i = ThoiGian To 0 Step -1
'1 la CN, 2 la thu 2 ....,7 la thu 7
'neu thu =0 tinh bao nhieu thu bay va cn
If Thu = 0 And (Weekday(ngaycuoi - i) = 1 Or Weekday(ngaycuoi - i) = 7) Then
songay = songay + 1
End If
If Weekday(ngaycuoi - i) = Thu Then
songay = songay + 1
End If

Next i

End Function
Function songayle(ngay1 As Date, ngay2 As Date, ngayle As Range)
Dim i As Integer
Dim ThoiGian As Integer
Dim ngaycuoi As Date
Dim ngaydau As Date
If ngay1 > ngay2 Then
ngaycuoi = ngay1
ngaydau = ngay2
Else
ngaycuoi = ngay2
ngaydau = ngay1
End If
'lay hieu so ngaycuoi-ngaydau

ThoiGian = ngaycuoi - ngaydau
For i = ThoiGian To 0 Step -1
If WorksheetFunction.CountIf(ngayle, ngaycuoi - i) > 0 Then
songayle = songayle + 1
End If
Next i
End Function
 
Lần chỉnh sửa cuối:
A/
Cái khó nhất là không thể xác định chính xác số ngày nghỉ lễ trong khoảng thời gian thử việc, vì vậy có thể làm theo một cách tuơng đối như sau
1/ Xác định số ngày nghỉ lễ theo hàm bạn tự tạo trên với ngay1 = ngaydau, ngay2 = ngaydau+songaythuviec
2/ EndDate=ngaydau+songaythuviec+ngayle

B/
1/ Dùng thủ công xác định chính xác số ngày nghỉ lễ trong Range
2/ Cũng dùng công thức trên để tính ra ngày cuối cùng

Trên cơ sở đó bạn viết đượic code mà phải không?
Thân
 
Lần chỉnh sửa cuối:
Upvote 0
Theo như phần mềm SAP...
Thì việc định nghĩa ngày lễ là phải định nghĩa mỗi năm (Vì Việt nam, một số ngày nghỉ lễ là ngày âm lịch). Vậy thì theo tôi nghĩ mình cũng phải làm như vậy, chứ không có một giải pháp nào 100% :(.

Lê Thanh Nhân
 
Upvote 0
Giải pháp có đây rồI!. Mọi người hảy down cái file dưới đây có kèm hướng dẫn cú pháp ở trong.

Mến chào
 

File đính kèm

  • Book3.xls
    26.5 KB · Đọc: 638
Upvote 0
Bạn hiểu sai vấn đề, hàm của bạn chỉ tính số ngày lễ, ngày thứ i trong ngaycuoi-ngaydau
Còn vấn đề cần làm là tính ngày cuối cùng. Ví dụ ngày đầu là a1=01/01/2007, số ngày phải cộng thêm là B1=10, ngayle:X1:X9
thu: 1,2,3...7
EndDate(A1,B1,thu,X1:X9), X1:X9 là 9 ngày lễ, tạm coi AL # DL + 30
cụ thể : EndDate(A1,B1,1,X1:X9)= 01/01/2007 + 1 (ngày CN) + 1 (ngày lễ 01/01)+ 10 = 13/01/2007
Giống như hàm workday
=WORKDAY(A1,B1,X1:X9) =15/01/2007 (do hàm này tính ngày nghỉ là t7+CN) nếu trừ 2 ngày thứ 7 =EndDate(A1,B1,1,X1:X9)= 13/01/2007
Bạn nghiên cứu thử
 
Upvote 0
Sẳng đây bạn mở lại cái WB3 mình up lên hôm nay. Vô VBE sủa cái hàng # 4 thành

If Format(StartDate, "#,##0") > Format(EndDate, "#,##0") Or Sw > 11 Or Sw < -1 Then
 
Upvote 0
KG Các anh chị:
Em có 1 yêu cầu cho 1 tiến độ bằng excel như sau :
Ngày bắt đầu : 30/04/2009
Ngày kêt thúc : 30/05/2009
ngày làm việc : 30 ngày
Em muốn tính ngày làm viec này đã trừ 0.5 ngày thứ 7 và nguyên ngày CN
Có phải mình dùng hàm netwokkdays không vậy
 
Upvote 0
KG Các anh chị:
Em có 1 yêu cầu cho 1 tiến độ bằng excel như sau :
Ngày bắt đầu : 30/04/2009
Ngày kêt thúc : 30/05/2009
ngày làm việc : 30 ngày
Em muốn tính ngày làm viec này đã trừ 0.5 ngày thứ 7 và nguyên ngày CN
Có phải mình dùng hàm netwokkdays không vậy
Giả sử
- Nhập ngày bắt đầu vào A1
- Nhập ngày kết thúc vào B1
Ta có:
- Tổng số ngày
PHP:
= B1 - A1 + 1
- Số ngày CN
PHP:
=INT((B1-A1-WEEKDAY(B1-6,2)+8)/7)
-Số ngày thứ 7:
PHP:
=INT((B1-A1-WEEKDAY(B1-5,2)+8)/7)
Vậy kết quả cần tìm:
PHP:
= Tổng số ngày - (Số ngày CN) - (Số ngày thứ 7)/2
Hay
PHP:
=B1-A1+1-INT((B1-A1-WEEKDAY(B1-6,2)+8)/7)-(INT((B1-A1-WEEKDAY(B1-5,2)+8)/7)/2)
 
Upvote 0
cám ơn anh nhiều!!!!!!!!!!!!!!!!!!!! Tôi đang cần lắm, hơi bị yếu về hàm ngày tháng.
 
Upvote 0
cám ơn anh nhiều!!!!!!!!!!!!!!!!!!!! Tôi đang cần lắm, hơi bị yếu về hàm ngày tháng.
Thế nếu tôi muốn tính như thể này:
Giả sử:
A1=500 (số giờ cần thiết để làm việc này)
B1="24/10/2011" (ngày bắt đầu làm việc)
C1=?? Ngày hoàn thành công việc.
Cần tính C1 trên cơ sở A1, B1 và phải trừ đi các ngày Thứ 7, Chủ nhật và ngày Lễ (nếu có).
 
Upvote 0
thế nếu tôi muốn tính như thể này:
Giả sử:
A1=500 (số giờ cần thiết để làm việc này)
b1="24/10/2011" (ngày bắt đầu làm việc)
c1=?? Ngày hoàn thành công việc.
Cần tính c1 trên cơ sở a1, b1 và phải trừ đi các ngày thứ 7, chủ nhật và ngày lễ (nếu có).
nếu excel 2010 bạn nghiên cứu thêm hàm này nhé
=workday.intl(a2,(500/8),1,$a$1:$g$1). vơi a2 là ngày bắt đầu, a1:g1 là những ngày nghỉ lễ nếu có
 
Lần chỉnh sửa cuối:
Upvote 0
Anh có thể giải thích cụ thể giùm em những con số dưới đây k ạ?
=INT((B1-A1-WEEKDAY(B1-6,2)+8)/7)
 
Upvote 0
Web KT
Back
Top Bottom