Tính số ngày làm việc trong Access

Liên hệ QC

chamnv

Thành viên mới
Tham gia
14/5/08
Bài viết
15
Được thích
1
Các bác giúp em các tính số ngày làm việc trong Access với ạ.
Ví dụ:
Em có 3 trường ( ứng với 3 textbox)
Field1: Songaycongno
Field2: Ngaygiaohang
Field3: Hanthanhtoan

Em đã tính được
hanthanhtoantamthoi=songaycongno+ngaygiaohang

Nhưng làm cách nào để tính được:
hanthanhtoan=số ngày làm việc của khoảng thời gian ngaygiaohang+hanthanhtoantamthoi

Trong excel thì nó như cái bài này các bác ạ
http://www.giaiphapexcel.com/forum/showthread.php?t=15042
 
HanThanhToanTamThoi=dateadd("d",SoNgayCongNo,NgayGiaoHang)
HanThanhToan=SoNgayLamViec(NgayGiaoHang,HanThanhToanTamThoi)

Bạn tạo 1 modul và copy hàm SoNgayLamViec này vào:

Mã:
Function SoNgayLamViec(TuNgay As Date, DenNgay As Date) As Long
    Dim mTuNgay As Date, mDenNgay As Date
    mTuNgay = IIf(TuNgay < DenNgay, TuNgay, DenNgay)
    mDenNgay = IIf(TuNgay > DenNgay, TuNgay, DenNgay)
    'Tim den ngay nghi dau tien trong khoang tu ngay den ngay
    Do While mTuNgay <= mDenNgay
        If Weekday(mTuNgay) = vbSaturday Or Weekday(mTuNgay) = vbSunday Then Exit Do
        mTuNgay = DateAdd("d", 1, mTuNgay)
    Loop
    If mDenNgay - mTuNgay >= 7 Then
        SoNgayLamViec = ((mDenNgay - mTuNgay) \ 7) * 2
        mTuNgay = DateAdd("d", ((mDenNgay - mTuNgay) \ 7) * 7, mTuNgay)
    End If
    While mTuNgay <= mDenNgay
        If Weekday(mTuNgay) = vbSaturday Or Weekday(mTuNgay) = vbSunday Then SoNgayLamViec = SoNgayLamViec + 1
        mTuNgay = DateAdd("d", 1, mTuNgay)
    Wend
End Function

Tuy nhiên hàm này chỉ trừ ra được các ngày thứ 7 và CN trong khoảng thời gian tungay denngay, Không trừ được các ngày lễ như 30/4, 01/5, 02/9,... Bạn nào có cách làm hay hơn mong được chia sẽ!
 
Cảm ơn bác đã reply
Nhưng khi em thực hiện đúng như bác hưỡng dẫn thì nó vẫn hoạt động được chính xác
Ví dụ:
Ngày giao hàng của em là ngày 12/11/2009
Hạn công nợ của em là 07 ngày
=> Hanthanhtoantamthoi=19/11/2009
=> Khi đó sử dụng hàm songaylamviec nó sẽ cho ra kết quả ở
hanthanhtoan=2
Trong khi thực tế nó sẽ là: 6 ngày làm việc ( 12,13,14,15,16,19)
Khi sử dụng hàm songaycongviec ở trên thì nó ra kết quả sai ạ.
 
Sorry bạn nhé, mình nhầm một chút. Thay vì đưa ra số ngày làm việc thì mình lại đưa ra số ngày nghỉ. Bạn copy lại hàm sau nhé:

Mã:
Function SoNgayLamViec(TuNgay As Date, DenNgay As Date) As Long
    Dim mTuNgay As Date, mDenNgay As Date, SoNgayNghi As Long
    mTuNgay = IIf(TuNgay < DenNgay, TuNgay, DenNgay)
    mDenNgay = IIf(TuNgay > DenNgay, TuNgay, DenNgay)
    'Tim den ngay nghi dau tien trong khoang tu ngay den ngay
    Do While mTuNgay <= mDenNgay
        If Weekday(mTuNgay) = vbSaturday Or Weekday(mTuNgay) = vbSunday Then Exit Do
        mTuNgay = DateAdd("d", 1, mTuNgay)
    Loop
    If mDenNgay - mTuNgay >= 7 Then
        SoNgayNghi = ((mDenNgay - mTuNgay) \ 7) * 2
        mTuNgay = DateAdd("d", ((mDenNgay - mTuNgay) \ 7) * 7, mTuNgay)
    End If
    While mTuNgay <= mDenNgay
        If Weekday(mTuNgay) = vbSaturday Or Weekday(mTuNgay) = vbSunday Then SoNgayNghi = SoNgayNghi + 1
        mTuNgay = DateAdd("d", 1, mTuNgay)
    Wend
    If DenNgay - TuNgay - SoNgayNghi + 1 > 0 Then SoNgayLamViec = DenNgay - TuNgay - SoNgayNghi + 1
End Function
 
Lần chỉnh sửa cuối:
hàm này sao em làm nó vẫn cho ra = 1
 
Web KT
Back
Top Bottom