VBA中查找日期格式数据

示例文件如下图所示,A列和B列为相同的日期,只是显示格式不同。
在这里插入图片描述

在Excel中查找指定日期,例如2022/3/3,可以定位到两个单元格,如下图所示。

在这里插入图片描述

无论单元格的日期使用的哪种格式,查找对话框中必须使用yyyy/m/d的日期格式,如果使用其他格式,则无法定位相应的单元格,这里使用的日期格式与区域设置中的短日期格式相同。

在这里插入图片描述

上述查找操作时录制宏,得到如下代码。

Sub 宏4()
    Cells.Find(What:="2022/3/3", After:=ActiveCell, LookIn:=xlFormulas2, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
    Cells.FindNext(After:=ActiveCell).Activate
End Sub

但是这个代码是无执行的,第一行Find代码报错,改造一下代码。

Sub 宏4_1()
    Set c = Cells.Find(What:="2022/3/3", After:=ActiveCell, LookIn:=xlFormulas2, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, MatchByte:=False, SearchFormat:=False)
    If c Is Nothing Then
        Debug.Print "查找失败"
    Else
        c.Activate
    End If
End Sub

运行代码,在立即窗口中输出查找失败,这就是录制代码无法执行的原因,Find返回值为空,所以Activate方法产生运行时错误。

修改参数LookIn:=xlValues,结果仍然是相同的。

Find无法定位的原因在于日期格式,VBA中使用Find查找日期时,只能使用m/d/yyyy,否则无法查找成功。修改参数What的赋值方式,用Format函数进行转换,代码如下所示。

Sub 宏4_2()
    Set c = Cells.Find(What:=Format("2022/3/3", "m/d/yyyy"), After:=ActiveCell, LookIn:=xlFormulas2, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, MatchByte:=False, SearchFormat:=False)
    If c Is Nothing Then
        Debug.Print "查找失败"
    Else
        c.Activate
    End If
End Sub

终于成功定位日期了。

各位同学,不要问我为什么,原因很简单,我也不知道 ~~~~~~


版权声明:本文为taller_2000原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。