【问题标题】:Calculate new invoice date including weekends, excluding holidays计算新的发票日期,包括周末,不包括节假日
【发布时间】:2010-11-08 15:39:05
【问题描述】:

我想计算一个新的发票日期如下:

Starting Date + 14 days 
Where days includes weekends, but excludes holidays.

我该怎么做?

WorkDays 和 Networkdays 功能似乎不太符合我的需求。

【问题讨论】:

    标签: excel


    【解决方案1】:

    “假期”的定义因国家/地区、公司、年份等而异,因此没有适合您需求的标准功能。这是我首选方法的过度简化版本:

    Function GetNetWorkDays(DateStart As Date, DateEnd As Date) As Integer
        Dim i As Date
        i = DateStart
    
        While i < DateEnd
            If i <> #01/01/1900# and _
               i <> #01/02/1900# Then _
                GetNetWorkDays = GetNetWorkDays + 1
            i = i + 1
        Wend
        Exit Function
    End Function
    

    #01/01/1900# 和 #01/02/1900# 是您选择的假期。从长远来看,您希望将日期条件移到它自己的表格中。

    【讨论】:

      【解决方案2】:

      我了解您想要使用公式而不是 VBA 的解决方案。

      假设你有:

       A4:A8 -> your holidays table
       A14   -> your start date
       A16   -> number of days to add
      

      生成以下辅助结构:

       c3    -> put a zero
       c4    -> =IF(AND(A4-A$14>0,(A4-A$14)<=(A$16+SUM(C$3:C3))),1,0)
       c5:c8 -> Copy down from c4
      

      因此,要获取新日期,请在结果单元格中键入以下内容:

       =A14+A16+SUM(C4:C8)  
      

      HTH!

      【讨论】:

        【解决方案3】:

        感谢您的回复。

        最后我选择了这个:

        Public Function GetCalendarDaysExHolidays(DateStart As Date, MaxDate As Date, NumDays As Integer) As Date
        Dim i As Date
        Dim DaysCounted As Integer
        Dim Rng As Range
        
        DaysCounted = 0
        
        i = DateStart
        
        Do While i < MaxDate
        
            Set Rng = Sheets("Bank holidays").Range("A1:A1000").Find(what:=Format(DateValue(i), "DD/MM/YYYY"), LookAt:=xlWhole, LookIn:=xlFormulas)
            If Rng Is Nothing Then
                DaysCounted = DaysCounted + 1
            End If
        
            i = i + 1
        
            If (DaysCounted = NumDays) Then
                GetCalendarDaysExHolidays = i
                Exit Do
            End If
        Loop
        Exit Function
        

        结束函数

        【讨论】:

        • 您明确要求提供公式,但您的标签不包含 excel-vba。
        • 是的,我知道,抱歉我更改了规格。
        • 所以我投票给你了。你不是在回答你自己的问题。此外,您似乎在发布此答案后更改了规格。
        • 我更改了问题,以完全匹配我采用的方法...您知道我没有得到任何代表将其标记为已回答对吗?很抱歉冒犯了你。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多