You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel中VBA代码及Ctrl+F无法查找d-m-year格式日期的问题

解决Excel中d-m-yyyy格式日期无法查找的问题

我之前也碰到过一模一样的糟心事!别慌,这大概率是因为Excel对日期的「存储值」和「显示格式」是分开的,要么是你的日期其实是文本格式,要么是查找时没匹配到Excel的内部识别逻辑。下面给你几个针对性的解决方案:

一、先搞清楚你的日期是啥类型

首先得确认单元格里是真正的日期值,还是看起来像日期的文本:

  • 选中疑似日期的单元格,看Excel底部的状态栏:如果显示的是类似43224这样的数字,那是真正的日期(Excel把日期存为1900年1月1日起的序列号);如果状态栏显示和单元格内容完全一样的4-5-2018,那就是文本型日期。

二、如果是真正的日期值,这么查找才对

如果单元格存的是日期序列号,查找时得顺着Excel的逻辑来:

1. Ctrl+F查找的正确操作

  • 别直接输入4-5-2018,要么输入Excel能识别的日期格式(比如根据你系统的区域设置,或者直接输入日期对应的序列号——你可以在空白单元格输=DATE(2018,5,4)得到这个数);
  • 或者打开查找对话框后点「选项」,勾选「匹配单元格格式」,先选中一个正确的日期单元格,点击「从单元格复制」,再粘贴到查找内容框,这样能精准匹配格式和值。

2. VBA代码的正确写法

VBA里处理日期别直接用字符串,要用Date类型或者序列号。比如要找2018年5月4日,代码可以这么写:

Sub FindTargetDate()
    Dim targetDate As Date
    targetDate = DateSerial(2018, 5, 4) ' 注意是年-月-日的顺序
    Dim foundCell As Range
    Set foundCell = Cells.Find(What:=targetDate, LookIn:=xlValues, LookAt:=xlWhole)
    
    If Not foundCell Is Nothing Then
        MsgBox "找到目标日期啦,在单元格:" & foundCell.Address
    Else
        MsgBox "没找到对应的日期哦"
    End If
End Sub

用DateSerial构造日期对象,能避免系统区域设置对字符串解析的干扰,比直接写"4-5-2018"靠谱多了。

三、如果是文本型日期,先转成真正的日期

要是你的日期是文本格式,得先转换成可识别的日期值:

  1. 选中所有文本日期单元格,点「数据」选项卡→「分列」:
    • 第一步选「分隔符号」,下一步选「其他」输入-,第三步列数据格式选「日期」,下拉框里选「DMY」(日-月-年),点完成就行;
  2. 或者用公式转换:在空白单元格输入=DATE(RIGHT(A1,4),MID(A1,FIND("-",A1)+1,FIND("-",A1,FIND("-",A1)+1)-FIND("-",A1)-1),LEFT(A1,FIND("-",A1)-1)),把A1换成你的文本日期单元格,下拉填充后再把公式结果复制粘贴为值。

转换完成后,再用上面的方法查找就没问题了。

额外小技巧

如果你经常要处理这类日期,可以给单元格设置自定义格式dd-mm-yyyy,这样显示的是你要的日-月-年,内部还是正确的日期序列号,不管是查找还是后续计算都不会出岔子。

内容的提问来源于stack exchange,提问作者Duy Huynh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:06:59