Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

Đăng ký học Excel và phân tích số liệu cùng GPE tháng 12 - TPHCM

Mua sách "VBA trong Excel - Cải thiện và tăng tốc" tái bản

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

Thảo luận trong 'Ứng dụng Quản trị cơ sở dữ liệu' bắt đầu bởi chamnv, 6 Tháng mười một 2009.

  1. chamnv

    chamnv Thành viên mới

    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
     
  2. dongnamnb

    dongnamnb Thành viên mới

    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ẽ!
     
  3. chamnv

    chamnv Thành viên mới

    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 ạ.
     
  4. dongnamnb

    dongnamnb Thành viên mới

    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: 7 Tháng mười một 2009
  5. tanhdakto

    tanhdakto Thành viên mới

    hàm này sao em làm nó vẫn cho ra = 1
     
  6. Good-Luck

    Good-Luck Thành viên tiêu biểu

    tim so ngay trong do tru so ngay chu nhat va thu 7 chi can dung ham nay la ok roi ko can lam ham chi cho met
    Column1
    [TR]
    [TD]WORKDAY ( ngay bat dau, ngay ket thuc, ngay nghi)[/TD]
    [/TR]
     

Chia sẻ trang này