Góp ý_Hàm tính số ngày theo dõi hợp đồng

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
719
Được thích
97
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Kính gửi các anh chị trên diễn đàn
Em hay theo dõi ngày hết hạn hợp đồng và các loại. Bình thường em hay tính thủ công dùng if các kiểu trường hợp. Nay em viết 1 hàm nhờ các anh kiểm tra, tối ưu giúp ạ
Em cám ơn các anh/chị
1648625172676.png
Mã:
Function Songay_HD(FirstDate As Date, EndDate As Date) As String
    If Not IsDate(FirstDate) Then Exit Function
    If Not IsDate(EndDate) Then Exit Function
    If FirstDate = Empty Then FirstDate = VBA.Date
    If EndDate = Empty Then EndDate = DateValue("1000/1/1")
    If EndDate < FirstDate Then
        Songay_HD = "Tr" & ChrW(7877) & " h" & ChrW(7841) & "n " & FirstDate - EndDate & " ngày"            'Tre han
    ElseIf FirstDate = EndDate Then
        Songay_HD = "Hôm nay h" & ChrW(7871) & "t h" & ChrW(7841) & "n"
    ElseIf EndDate > FirstDate Then
    
        years = IIf(EndDate > DateSerial(VBA.year(EndDate), VBA.month(FirstDate), VBA.day(FirstDate)), DateDiff("yyyy", FirstDate, EndDate), DateDiff("yyyy", FirstDate, EndDate) - 1)
        If years < 1 Then
            years = ""
        Else
            years = years & " n" & ChrW(259) & "m "
        End If
        months = IIf(VBA.day(EndDate) > VBA.day(FirstDate), Abs(VBA.month(FirstDate) - VBA.month(EndDate)), Abs(VBA.month(FirstDate) - VBA.month(EndDate)) - 1)
        If months < 1 Then
            months = ""
        Else
            months = months & " tháng "
        End If
        Days = IIf(VBA.day(EndDate) > VBA.day(FirstDate), VBA.day(EndDate) - VBA.day(FirstDate), (VBA.day(DateSerial(VBA.year(FirstDate), VBA.month(FirstDate) + 1, 1) - 1) - VBA.day(FirstDate)) + VBA.day(EndDate))
        
        Songay_HD = "Còn " & years & months & Days & " ngày"
    End If
End Function
 

File đính kèm

  • Gop y_Ham_Songay_HD.xlsm
    25 KB · Đọc: 9
Kính gửi các anh chị trên diễn đàn
Em hay theo dõi ngày hết hạn hợp đồng và các loại. Bình thường em hay tính thủ công dùng if các kiểu trường hợp. Nay em viết 1 hàm nhờ các anh kiểm tra, tối ưu giúp ạ
Em cám ơn các anh/chị
View attachment 273769
Mã:
Function Songay_HD(FirstDate As Date, EndDate As Date) As String
    If Not IsDate(FirstDate) Then Exit Function
    If Not IsDate(EndDate) Then Exit Function
    If FirstDate = Empty Then FirstDate = VBA.Date
    If EndDate = Empty Then EndDate = DateValue("1000/1/1")
    If EndDate < FirstDate Then
        Songay_HD = "Tr" & ChrW(7877) & " h" & ChrW(7841) & "n " & FirstDate - EndDate & " ngày"            'Tre han
    ElseIf FirstDate = EndDate Then
        Songay_HD = "Hôm nay h" & ChrW(7871) & "t h" & ChrW(7841) & "n"
    ElseIf EndDate > FirstDate Then
   
        years = IIf(EndDate > DateSerial(VBA.year(EndDate), VBA.month(FirstDate), VBA.day(FirstDate)), DateDiff("yyyy", FirstDate, EndDate), DateDiff("yyyy", FirstDate, EndDate) - 1)
        If years < 1 Then
            years = ""
        Else
            years = years & " n" & ChrW(259) & "m "
        End If
        months = IIf(VBA.day(EndDate) > VBA.day(FirstDate), Abs(VBA.month(FirstDate) - VBA.month(EndDate)), Abs(VBA.month(FirstDate) - VBA.month(EndDate)) - 1)
        If months < 1 Then
            months = ""
        Else
            months = months & " tháng "
        End If
        Days = IIf(VBA.day(EndDate) > VBA.day(FirstDate), VBA.day(EndDate) - VBA.day(FirstDate), (VBA.day(DateSerial(VBA.year(FirstDate), VBA.month(FirstDate) + 1, 1) - 1) - VBA.day(FirstDate)) + VBA.day(EndDate))
       
        Songay_HD = "Còn " & years & months & Days & " ngày"
    End If
End Function
Dòng đầu thời hạn còn phải là 4 năm 9 tháng 14 ngày chứ bạn!
 
Upvote 0
Sau mấy ngày vật lộn, tìm các kiểu. Em chỉnh lại hàm này và đã ra kết quả như hàm Dateif nhưng chưa tối ưu được cho gọn, nhờ anh chị chỉnh sửa giúp ạ
Mã:
Function Songay_HD(FirstDate As Date, EndDate As Date) As String

    Dim minusnumber As Integer
    Dim Tongthang As Long
    Dim Sothang As Long
    
    If Not IsDate(FirstDate) Then Exit Function
    If Not IsDate(EndDate) Then Exit Function
    If FirstDate = Empty Then FirstDate = VBA.Date
    If EndDate = Empty Then EndDate = DateValue("1000/1/1")
    
    minusnumber = 0
            
    If EndDate < FirstDate Then
        Songay_HD = "Tr" & ChrW(7877) & " h" & ChrW(7841) & "n " & FirstDate - EndDate & " ngày"            'Tre han
    ElseIf FirstDate = EndDate Then
        Songay_HD = "Hôm nay h" & ChrW(7871) & "t h" & ChrW(7841) & "n"
    ElseIf EndDate > FirstDate Then
    
        'Tinh so nam
        If (VBA.Month(FirstDate) > VBA.Month(EndDate)) Then
           minusnumber = 1
        Else
           If (VBA.Month(EndDate) = VBA.Month(FirstDate)) Then
              If (VBA.Day(EndDate) < VBA.Day(FirstDate)) Then
                 minusnumber = 1
              Else
                 minusnumber = 0
              End If
           Else
              minusnumber = 0
           End If
        End If
        
        years = VBA.Year(EndDate) - VBA.Year(FirstDate) - minusnumber
        years = IIf(years < 1, "", years & " n" & ChrW(259) & "m ")
        
        'Tinh so thang

        If (VBA.Day(EndDate) < VBA.Day(FirstDate)) Then
           minusnumber = 1
        End If
        
        Tongthang = (12 * (VBA.Year(EndDate) - VBA.Year(FirstDate))) + VBA.Month(EndDate) - VBA.Month(FirstDate) - minusnumber
        Sothang = 12
        months = Tongthang - (Sothang * VBA.Int(Tongthang / Sothang))
        months = IIf(months < 1, "", months & " tháng ")
        'Tinh so ngay
        If (VBA.Day(EndDate) = VBA.Day(FirstDate)) Then
           Days = 0
        Else
           If (VBA.Day(EndDate) > VBA.Day(FirstDate)) Then
              Days = VBA.Day(EndDate) - VBA.Day(FirstDate)
           Else
              Days1 = VBA.DateSerial(VBA.Year(FirstDate), VBA.Month(FirstDate) + 1, VBA.Day(EndDate))
              'Debug.Print Days1
              Days = Days1 - FirstDate
           End If
        End If
        Days = IIf(Days < 1, "", Days & " ngày")
        
        Songay_HD = "Còn " & years & months & Days
    End If
End Function

1648715701144.png
 

File đính kèm

  • Gop y_Ham_Songay_HD.xlsm
    23.6 KB · Đọc: 7
Upvote 0
Web KT

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

Back
Top Bottom