Tính số ngày làm việc (không tính ngày thứ bảy và chủ nhật) (1 người xem)

  • Thread starter Thread starter ngoanvn
  • Ngày gửi Ngày gửi

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

ngoanvn

Thành viên hoạt động
Tham gia
13/10/08
Bài viết
111
Được thích
17
Nghề nghiệp
Công chức.
Chào các anh chị!
Xin các anh chị chỉ giúp tôi một việc sau:
Tại ô a1 tôi nhập ngày bắt đầu làm viêc 01/01/2009; tại ô a2 tôi nhập today(); vậy thì tại ô a3 lập công thức như thế nào để trả về số ngày làm việc nhưng không tính ngày thứ bảy và chủ nhật.
Cảm ơn các anh chị nhé!
 
Chào các anh chị!
Xin các anh chị chỉ giúp tôi một việc sau:
Tại ô a1 tôi nhập ngày bắt đầu làm viêc 01/01/2009; tại ô a2 tôi nhập today(); vậy thì tại ô a3 lập công thức như thế nào để trả về số ngày làm việc nhưng không tính ngày thứ bảy và chủ nhật.
Cảm ơn các anh chị nhé!
Số ngày làm việc trừ thứ bảy và chủ nhật sẽ bằng: Tổng số ngày làm việc - tổng số ngày thứ bảy - tổng số ngày chủ nhật
Trong đó: Tổng số ngày thứ bảy và chủ nhật được tính theo công thức trong bài viết này:
http://www.giaiphapexcel.com/forum/showpost.php?p=16111&postcount=16
 
Chào các anh chị!
Xin các anh chị chỉ giúp tôi một việc sau:
Tại ô a1 tôi nhập ngày bắt đầu làm viêc 01/01/2009; tại ô a2 tôi nhập today(); vậy thì tại ô a3 lập công thức như thế nào để trả về số ngày làm việc nhưng không tính ngày thứ bảy và chủ nhật.

Bạn đã nói đến ngày làm việc tức là trừ cả ngày lễ, lại thêm trừ ngày nghỉ là thứ 7 và chủ nhật, bạn có thể tham khảo bài viết của bạn Digita, xin phép được trích lại:
Chào mọi người,

Đây là câu trả lời chung cho 2 thread sau đây:

http://www.giaiphapexcel.com/forum/showthread.php?t=2431

http://www.giaiphapexcel.com/forum/showthread.php?t=2422

Xin giới thiệu 3 hàm dùng để tính toán những vấn đề thường gặp phải có liên quan đến ngày tháng:

Hàm đếm số ngày - SoNgay(ngày 1, ngay 2, x, cột chứa các ngày lễ). Xin quí vị xem hướng dẫn chi tiết trong file đính kèm. Hàm này có rất nhiều chức năng bao gồm luôn cách tính datediff và Networkdays. Khác với khi dùng hàm networkdays, bạn khỏi cần cài đặt addin VBA analysis toolpak hay analysis toolpak.

Nếu ta biết ngày 1 công trình bắt đầu và dự tính là bao nhiêu ngày sẽ hoàn tất, hàm thứ 2 (Edate) sẽ giúp tính ngày kết thúc. Edate có nghĩa là end date (ngày cuối). Cú pháp dùng là edate(ngày đầu, số ngày làm việc,
cột chứa các ngày lễ).

Hàm thứ 3 là Sdate (start date - ngày bắt đầu). Cái hàm này làm ngược lại thao tác Edate khi ta biết ngày kết thúc và muốn tìm ngày bắt đầu. Cú pháp giống như hàm 2.

Các hàm trên đều tính ngày làm là từ Thứ 2 đến Thứ 6. Nếu tính ngày Thứ 7 là 1 ngày làm việc bình thường thì cần dùng hàm SoNgay để đếm bao nhiêu ngày Thứ 7 trong thời gian tính.

Thí dụ: 1 công việc bắt đầu vào ngày 29/12/2006 (ở ô J1) và mất 10 ngày công để hoàng thành. Nếu không làm ngày Thứ 7 thì Edate(J1, 10, cột chứa ngày lể) = 12/1/2007. Nếu có làm ngày Thứ 7 thì cần dùng 2 công thức liên kết như sau:

Edate(J1, 10 - SoNgay(J1,Edate(ngày bắt đầu, 10, Ngày lễ),7,Ngày lễ),ngày lễ).

Đã chạy thử các hàm này trong XL 2003 thì cho kết quả đúng hết. Tuy chưa thữ trong các bản XL khác, nhưng tôi tin là các hàm này tương hợp với tất cả ấn bản XL cũ và mới.

Mời mọi người xài thữ cho ý kiến. Nếu gặp trục trặc xin pm cho mình biết.

Mến chào
 

File đính kèm

Chào các anh chị!
Xin các anh chị chỉ giúp tôi một việc sau:
Tại ô a1 tôi nhập ngày bắt đầu làm viêc 01/01/2009; tại ô a2 tôi nhập today(); vậy thì tại ô a3 lập công thức như thế nào để trả về số ngày làm việc nhưng không tính ngày thứ bảy và chủ nhật.
Cảm ơn các anh chị nhé!
Có công thức cho bạn luôn:
Mã:
=INT((B1-A1+WEEKDAY(A1,2))/7)*5+MIN(MOD(B1-(A1-WEEKDAY(A1,2)),7),5)-MIN(WEEKDAY(A1,2),5)+1
 
Bạn đã nói đến ngày làm việc tức là trừ cả ngày lễ, lại thêm trừ ngày nghỉ là thứ 7 và chủ nhật, bạn có thể tham khảo bài viết của bạn Digita, xin phép được trích lại:
Nếu bạn tính trừ thêm ngày lể nữa, thôi thì dùng hàm NETWORKDAYS cho xong, cần gì code
------------------
Có công thức cho bạn luôn:
Mã:
=INT((B1-A1+WEEKDAY(A1,2))/7)*5+MIN(MOD(B1-(A1-WEEKDAY(A1,2)),7),5)-MIN(WEEKDAY(A1,2),5)+1
Công thức này chưa đúng!
Thử nghiệm A1 = 03/01/2009B1 = 05/01/2009, công thức của bạn cho kết quả = 2, mà lý ra nó phải =1 (ngày 3/1/2009 và 4/1/2009 là thứ bảy, chủ nhật)
Tôi thì xài cái này:
PHP:
=B2-A2+1-INT((B2-A2-WEEKDAY(B2)+8)/7)-INT((B2-A2-WEEKDAY(B2-5,2)+8)/7)
 

File đính kèm

Lần chỉnh sửa cuối:
Công thức này chưa đúng!
Thử nghiệm A1 = 03/01/2009B1 = 05/01/2009, công thức của bạn cho kết quả = 2, mà lý ra nó phải =1 (ngày 3/1/2009 và 4/1/2009 là thứ bảy, chủ nhật)
Sơ xuất quá. Nhầm một chút:
=INT((B1-A1+WEEKDAY(A1,2))/7)*5+MIN(MOD(B1-(A1-WEEKDAY(A1,2)),7),5)-MIN(WEEKDAY(A1,2),5)+1
Sửa lại thành:
=INT((B1-A1+WEEKDAY(A1,2))/7)*5+MIN(MOD(B1-(A1-WEEKDAY(A1,2)),7),5)-MIN(WEEKDAY(A1,2),6)+1
 
@ndu: INT((B2-A2-WEEKDAY(B2-5,2)+8)/7)
Anh co the giai thich ve cong thuc tinh ngay thu bay nay gium duoc khong? (tu cong thuc nay chi can thay doi vai diem la co the tinh so ngay thu 2,3,4,5,6,7,cn) Minh suy nghi mai van chua hieu cach suy luan cua anh. Mong chi giao. Tks much
 
Giúp mình với!!!
Mình đã thử sử dụng file Cac_ham_Date.xls thì phát hiện ra một kết quả không đúng. Ví dụ: Mình thử tính từ ngày 13/2/2010 đến ngày 19/2/2010 file trên trả ra kết quả là 3, đúng ra phải là 1 vì 02 ngày 17/2/2010 và ngày 18/2/2010 là 02 ngày nghỉ bù cho 02 ngày 13/2/2010 và 14/2/2010. Mong anh chỉ giúp bài toán trên. Cám ơn nhiều!
 
Giúp mình với!!!
Mình đã thử sử dụng file Cac_ham_Date.xls thì phát hiện ra một kết quả không đúng. Ví dụ: Mình thử tính từ ngày 13/2/2010 đến ngày 19/2/2010 file trên trả ra kết quả là 3, đúng ra phải là 1 vì 02 ngày 17/2/2010 và ngày 18/2/2010 là 02 ngày nghỉ bù cho 02 ngày 13/2/2010 và 14/2/2010. Mong anh chỉ giúp bài toán trên. Cám ơn nhiều!
Bạn hỏi thế không cảm thấy vô lý sao?
Làm sao Excel nó hiểu được cty bạn nghỉ bù vào ngày nào mà tính chứ
Ngoài ra, cụ thể bạn có yêu cầu tính toán thế nào nên đưa file lên đây cho để hình dung nhé!
 
Mình gửi file lên rồi, mong bác chỉnh sửa dùm. Cám ơn nhiều
 

File đính kèm

Mình gửi file lên rồi, mong bác chỉnh sửa dùm. Cám ơn nhiều
Tóm lại thế này:
Excel chỉ tính xem ngày nào là thứ bảy, chủ nhật và các ngày lễ mà bạn đã liệt kê... Ngoài ra nó không thể biết được ngày nghỉ bù là ngày nào cả (quy định mổi nơi mổi khác)
Nếu bạn muốn ngày nào sẽ là ngày nghỉ thì cứ điền vào bảng liệt kê, thế thôi!
 
Hàm của bạn cũng có thể không cần dùng vòng lặp For . . . Next

PHP:
Function SoNgay(Date1 As Date, Date2 As Date, Sw As Integer, PH As Range) As Integer
'Hàm dém ngày:                sw fr -1 to 11'
'Cú pháp =SoNgay(ngay cuoi, ngay dau, Sw, Vung co ngay le)'

Dim i As Integer, TimeLen As Integer, WeD As Integer
TemDate = Date1

Date1 = WorksheetFunction.Min(Date1, Date2)
Date2 = WorksheetFunction.Max(TemDate, Date2)
If Date1 = Date2 Or Sw > 11 Or Sw < -1 Then
   MsgBox ("Date1 & Date2 must be different, Sw 0 - 11")
   Exit Function
End If
TimeLen = DateDiff("d", Date1, Date2)
 For i = 0 To TimeLen
   With WorksheetFunction
      WeD = Weekday(Date1 + i)
      If Weekday(Date1 + i, vbSunday) = Sw Then
         SoNgay = SoNgay + 1
      ElseIf Sw = 8 And (WeD = 1 Or WeD = 7) Then
         SoNgay = SoNgay + 1
      ElseIf Sw = 9 And .CountIf(PH, Date1 + i) > 0 Then
         SoNgay = SoNgay + 1
      ElseIf Sw = 10 And (.CountIf(PH, Date1 + i) > 0 Or (WeD = 1 Or WeD = 7)) Then
         SoNgay = SoNgay + 1
      ElseIf Sw = 11 And (.CountIf(PH, Date1 + i) = 0 And (WeD <> 1 And WeD <> 7)) Then
         SoNgay = SoNgay + 1
      End If
   End With
 Next i
If Sw = -1 Then SoNgay = TimeLen
If Sw = 0 Then SoNgay = TimeLen + 1
End Function

. . . . . . . . . . . . . . . . . . . . . (Mình chỉ thoáng nghĩ ra thế thôi; Rất mong mọi người tiếp tục quan tâm) --=0
 
+ Trong Excel có hàm tính số ngày làm việc từ start_date đến end_date trừ ngày nghỉ thứ 7, chủ nhật và có thể có những ngày nghỉ khác ví dụ như 1/1, 30/4,...
+ Công thức: =NETWORKDAY(ngày_bắt_đầu, ngày_kết_thúc[, danh_sách_ngày_nghỉ])
+ Lưu ý: danh sách ngày nghỉ phải đặt trong dấu { }
 
các bạn giúp mình với: các bạn lập công thức tính giúp mình với yêu cầu như sau:
VD: (ngày, tháng, năm) hiện tại + 10 (số 10 được hiểu là số ngày làm việc từ t2 đến t6) = (ngày, tháng, năm) tiếp theo đã được cộng ngày t7,cn,ngày lễ, nghỉ bù)
rất mong các bạn sớm giúp mình. Cảm ơn các bạn rất nhiều !
 
Tóm lại thế này:
Excel chỉ tính xem ngày nào là thứ bảy, chủ nhật và các ngày lễ mà bạn đã liệt kê... Ngoài ra nó không thể biết được ngày nghỉ bù là ngày nào cả (quy định mổi nơi mổi khác)
Nếu bạn muốn ngày nào sẽ là ngày nghỉ thì cứ điền vào bảng liệt kê, thế thôi!
Chào mọi người,cho minh hỏi tí nha,mình muốn có một hàm mà khi mình bấm vào ô (VD:A5) hiện dấu cộng kéo xuống thì ngày/tháng sẽ liên tục nhau nhưng trừ thứ 7 và chủ nhật.Nếu khi có ngày đột xuất thì có hàm nào thay thế không ? Rất cám ơn mọi người giúp đỡ. Tôi có up file lên đấy. Nếu được gởi vào mail : tranhuu_65@yahoo.com.vn
 

File đính kèm

Chào mọi người,cho minh hỏi tí nha,mình muốn có một hàm mà khi mình bấm vào ô (VD:A5) hiện dấu cộng kéo xuống thì ngày/tháng sẽ liên tục nhau nhưng trừ thứ 7 và chủ nhật.Nếu khi có ngày đột xuất thì có hàm nào thay thế không ? Rất cám ơn mọi người giúp đỡ. Tôi có up file lên đấy
Ý bạn nói là chức năng KÉO FILL chăng?
Kéo fill nó tuân theo quy luật do anh Bill đề ra, sẽ không có chuyện nó biết được ngày nào là thứ 7, CN để mà "né" đâu
Có chăng là dùng công thức. Ví dụ:
- Gõ ngày nào đó vào cell A5
- Tại A6, ta dùng công thức =A5+IF(WEEKDAY(A5)>=6,9-WEEKDAY(A5),1) rồi kéo fill xuống
Nếu được gởi vào mail : tranhuu_65@yahoo.com.vn
Bạn nhờ người ta thì tự vào đây mà xem, ai rảnh đâu mà gửi mail cho bạn chứ
 
Lần chỉnh sửa cuối:
các bạn giúp mình với: các bạn lập công thức tính giúp mình với yêu cầu như sau:
VD: (ngày, tháng, năm) hiện tại + 10 (số 10 được hiểu là số ngày làm việc từ t2 đến t6) = (ngày, tháng, năm) tiếp theo đã được cộng ngày t7,cn,ngày lễ, nghỉ bù)
rất mong các bạn sớm giúp mình. Cảm ơn các bạn rất nhiều !
nhớ lúc trước mình đa có từng làm qua bài na ná kiểu này, nhưng ko nhớ ở trang nào thôi gửi lại file cho bạn tham khảo, xem ý bạn có phải vậy ko???
 

File đính kèm

nhớ lúc trước mình đa có từng làm qua bài na ná kiểu này, nhưng ko nhớ ở trang nào thôi gửi lại file cho bạn tham khảo, xem ý bạn có phải vậy ko???

Excel có sẵn hàm WORKDAY rồi, cứ thế mà xài, mắc gì phải viết thêm code
(Excel 2010 có hàm WORKDAY.INTL còn hay hơn nữa...)
 
Ý bạn nói là chức năng KÉO FILL chăng? Kéo fill nó tuân theo quy luật do anh Bill đề ra, sẽ không có chuyện nó biết được ngày nào là thứ 7, CN để mà "né" đâu Có chăng là dùng công thức. Ví dụ: - Gõ ngày nào đó vào cell A5 - Tại A6, ta dùng công thức =A5+IF(WEEKDAY(A5)>=6,9-WEEKDAY(A5),1) rồi kéo fill xuống Bạn nhờ người ta thì tự vào đây mà xem, ai rảnh đâu mà gửi mail cho bạn chứ
Cám ơn bạn ndu ,mình sợ quên trang nên phòng thôi mà không có ý gì đâu. Rất cám ơn.Có gì mình hỏi tiếp. À ! Mình viết tại ô A5 là ngày 25/2/13(định dạng như vậy),ô A6 viết công thức như của bạn nhưng bị lỗi,mình sửa dấu phấy trước số 1 thành dấu chấm phấy thì không bị lỗi nhưng khi ENTER nó vẫn là 25/2/13.Mong bạn giúp mình nha.Cám ơn bạn.
 
Lần chỉnh sửa cuối:
À ! Mình viết tại ô A5 là ngày 25/2/13(định dạng như vậy),ô A6 viết công thức như của bạn nhưng bị lỗi,mình sửa dấu phấy trước số 1 thành dấu chấm phấy thì không bị lỗi nhưng khi ENTER nó vẫn là 25/2/13.Mong bạn giúp mình nha.Cám ơn bạn.

Cứ nguyên file bạn đã làm lên đây sẽ biết nguyên nhân là gì liền
 
Bạn giúp mình nha,file mình làm đây bạn xem sai chỗ nào không?

Công thức tôi ghi rõ ràng là:
=A5+IF(WEEKDAY(A5)>=6,9-WEEKDAY(A5),1)
Bạn lại ghi thành:
=A6+IF(WEEKDAY(A6)>=6.9-WEEKDAY(A6),1)
Nếu bị lỗi về dấu phẩy, cùng lắm sửa dấu phẩy thành dấu chấm phẩy thôi chứ
=A5+IF(WEEKDAY(A5)>=6;9-WEEKDAY(A5);1)
sao lại sửa thành DẤU CHẤM ---> Kết quả sai là phải rồi
 
Công thức tôi ghi rõ ràng là:
=A5+IF(WEEKDAY(A5)>=6,9-WEEKDAY(A5),1)
Bạn lại ghi thành:
=A6+IF(WEEKDAY(A6)>=6.9-WEEKDAY(A6),1)
Nếu bị lỗi về dấu phẩy, cùng lắm sửa dấu phẩy thành dấu chấm phẩy thôi chứ
=A5+IF(WEEKDAY(A5)>=6;9-WEEKDAY(A5);1)
sao lại sửa thành DẤU CHẤM ---> Kết quả sai là phải rồi
Cám ơn bạn nha,mình tìm ra lỗi rồi,không sửa dấu (;) ở chỗ 6;9 .Một lần nữa cám ơn bạn nhiều.
Mình còn thọ giáo bạn nhiều nữa,đừng buồn nha.
 
Công thức tôi ghi rõ ràng là:
=A5+IF(WEEKDAY(A5)>=6,9-WEEKDAY(A5),1)
Bạn lại ghi thành:
=A6+IF(WEEKDAY(A6)>=6.9-WEEKDAY(A6),1)
Nếu bị lỗi về dấu phẩy, cùng lắm sửa dấu phẩy thành dấu chấm phẩy thôi chứ
=A5+IF(WEEKDAY(A5)>=6;9-WEEKDAY(A5);1)
sao lại sửa thành DẤU CHẤM ---> Kết quả sai là phải rồi
ngoài ra nếu dùng excel 2007---trở lên thì chỉ cần vầy là ok thôi
sau đó fill xuống
 

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

Back
Top Bottom