日期状态功能显示逾期,到期日期及即将到期

时间:2018-02-07 18:31:37

标签: excel vba function

我目前正在处理Excel中的功能,该功能将根据提供的截止日期显示活动的状态。

此功能将显示: 如果今天()>“逾期”截止日期; “即将到期”如果截止日期在一周内 如果今天()<截止日期+7

Image of the table for reference

以下是我能够提出的一个例子:

Function Status_of_Date()

If Sheets("Issue_Log").Range("Due_Date").Value < Date Then
    Sheets("Issue_Log").Range("Date_Status").Value = "Overdue" 'overdue

ElseIf Sheets("Issue_Log").Range("Due_Date").Value < 7 + Date Then
    Sheets("Issue_Log").Range("Date_Status").Value = "Due Later" ' Due Soon

ElseIf Sheets("Issue_Log").Range("Due_Date").Value > 7 + Date Then
    Sheets("Issue_Log").Range("Date_Status").Value = "Due Later" ' Due Later

Else
End If
End Function

1 个答案:

答案 0 :(得分:2)

无代码解决方案

在您的表格中添加一列,以计算剩余的天数 - 因为任何负面消息都是过期的,所有负面消息-1

enter image description here

使用表格公式计算它:

=IF([@[Due Date]]-TODAY()<0,-1,[@[Due Date]]-TODAY())

接下来,让另一张表保持给定天数的状态:

enter image description here

由于您有三种状态,并且他们确实范围值,因此要达到您需要的价值后

  • 所有-1
  • Overdue
  • 0
  • 所有内容Soon的行
  • 7
  • 所有内容Later的行

现在你的&#34;日期状态&#34;列可以是简单的VLOOKUP公式:

enter image description here

再次,使用表格公式;注意&#34;近似匹配&#34;最后一个参数:

=VLOOKUP([@Days],tblStatusLookup,2,TRUE)

tblStatusLookup调整为您为查找表命名的内容。

看看,不是一行代码!

然后,如果您不需要显示,可以隐藏[天]列,查找表可以在任何您想要的位置 - 如果需要更改阈值,或者需要添加新状态,你只需调整查找表(重要的是:保持[Days]按升序排序,近似匹配 VLOOKUP如何工作!)

OP中的错误

您的函数需要知道要使用的行。那应该是一个参数;更改签名以接受一个 - 或者甚至更好,将其更改为接受DueDate参数 - 然后您根本不需要关心除您日期之外的任何事情。 ;重新给出:

Public Function GetDateStatus(ByVal dueDate As Date) As String
    If dueDate - Date < 0 Then
        GetDateStatus = "Overdue"
    ElseIf dueDate - Date < 7 Then
        GetDateStatus = "Due Soon"
    Else
        GetDateStatus = "Due Later"
    End If
End function

然后在你的表格中,公式为:

=GetDateStatus(@[Due Date])

无需担心范围和每个值的来源和位置的细节 - 当您在正确的抽象级别工作时,代码变得更加简单!

请注意,不允许工作表功能更改其他单元格。值:计算值。