我目前正在处理Excel中的功能,该功能将根据提供的截止日期显示活动的状态。
此功能将显示: 如果今天()>“逾期”截止日期; “即将到期”如果截止日期在一周内 如果今天()<截止日期+7
以下是我能够提出的一个例子:
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
答案 0 :(得分:2)
在您的表格中添加一列,以计算剩余的天数 - 因为任何负面消息都是过期的,所有负面消息-1
:
使用表格公式计算它:
=IF([@[Due Date]]-TODAY()<0,-1,[@[Due Date]]-TODAY())
接下来,让另一张表保持给定天数的状态:
由于您有三种状态,并且他们确实范围值,因此要达到您需要的价值后
-1
Overdue
行
0
Soon
的行
7
Later
的行
现在你的&#34;日期状态&#34;列可以是简单的VLOOKUP
公式:
再次,使用表格公式;注意&#34;近似匹配&#34;最后一个参数:
=VLOOKUP([@Days],tblStatusLookup,2,TRUE)
将tblStatusLookup
调整为您为查找表命名的内容。
看看,不是一行代码!
然后,如果您不需要显示,可以隐藏[天]列,查找表可以在任何您想要的位置 - 如果需要更改阈值,或者需要添加新状态,你只需调整查找表(重要的是:保持[Days]按升序排序,近似匹配 VLOOKUP如何工作!)
您的函数需要知道要使用的行。那应该是一个参数;更改签名以接受一个 - 或者甚至更好,将其更改为接受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])
无需担心范围和每个值的来源和位置的细节 - 当您在正确的抽象级别工作时,代码变得更加简单!
请注意,不允许工作表功能更改其他单元格。值:计算值。