Excel提供了许多根据单元格的内容返回True或False的函数。例如,如果单元格为空,则ISBLANK返回True;如果单元格包含错误值,则ISERR返回True;如果单元格包含文本,则ISTEXT返回True。您可能想知道是否可以确定某个单元格是否包含时间。

简短的答案是“否”,您不能这样做-Excel不包含指示单元格是否包含时间的函数。原因很简单:Excel中的时间和日期从技术上讲就是数字。日期是1到2958465范围内的任何数字,代表1/1/1900到12/31/9999的日期。如果在数字上加上小数部分,则表示时间(0是午夜,0.25是凌晨6:00,0.5是中午,依此类推)。

知道可用于日期和时间的值的范围,以及包含时间的单元格应正确格式化以显示时间的事实,您可以创建一个公式,以指示单元格是否包含时间:

=IF(AND(CELL("format",B2)>="D6",CELL("format",B2)<="D9"), "Time Format","Not Time Format")

|||此公式检查应用于单元格B2的格式。如果格式是时间的常用格式之一,则它将返回文本“时间格式”。如果使用其他格式,则公式将返回“非时间格式”。

另一种方法是检查单元格B2中的值是否为有效时间值。您可以使用以下公式来做到这一点:

=IF(TIMEVALUE(TEXT(B2,"hh:mm:ss"))=B2, "Time Entry", "Not a Time Entry")

只要单元格B2仅包含一个时间,该函数就可以正常工作。如果单元格同时包含日期和时间,则该函数始终返回“不是时间条目”。

为了充分利用这两个方面(检查格式和单元格中的值),请考虑在VBA中创建用户定义的函数。原因很简单:VBA包含IsDate函数,该函数不仅查看数字的当前范围,还检查该单元格是否格式化为日期。以下宏提供了有关如何创建此类函数的示例:

Function IsTime(rng As Range) As Boolean     Dim sValue As String     sValue = rng.Cells(1).Text     On Error Resume Next     IsTime = IsDate(TimeValue(sValue))

On Error GoTo 0 End Function

要使用此功能,请在单元格中使用以下公式:

=IsTime(B2)

该函数读取值的显示方式(使用单元格对象的text属性),然后尝试使用TIMEVALUE函数进行转换。如果那是一个日期(由IsDate函数确定),则显示为有效时间。如果不是日期,则VBA会生成错误,程序会将其编程为忽略错误。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9699)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处找到适用于Excel的较早菜单界面的本技巧的版本:

链接:/ excel-Checking_for_Time_Input [检查时间输入]。