【问题标题】:Find a cell containing a specific date查找包含特定日期的单元格
【发布时间】:2020-07-24 03:21:16
【问题描述】:

我有一个 Excel 作为时间线记录。 B 列包含一年中的日期,其右侧的列记录各种事件。

我想制作一个可以跳转到当前日期行的按​​钮。我尝试做的第一件事是找到一个包含特定日期的单元格。我从 B 列中的现有单元格中获取日期,然后返回查找它。但是Find 方法什么也不返回。

Sub gotoToday()

Dim LDate As Date
Dim dateCol As Range
Dim cell As Range

LDate = Range("b197").Value ' do get a valid date value here

Set dataCol = Range("B2:B365") ' b197 is inside the range

dataCol.Select

Set cell = Selection.Find(what:=LDate, after:=ActiveCell, LookIn:=xlFormulas, _
    Lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

cell.Select ' cell get Nothing here

End Sub

基本上我在关注This stackoverflow post。不知道我错过了什么,有人可以帮我吗?

【问题讨论】:

    标签: excel vba date find


    【解决方案1】:

    我的猜测是您正在寻找 Date 类型 (Dim LDate As Date) 而 dataCol 包含字符串。尝试寻找一个字符串:

    Dim LDate As String
    '...
    LDate = Range("b197").Text
    '...
    

    编辑

    您可以使用Format 函数从日期获取字符串,按照您的喜好进行格式化。示例:

    LDate = Format(Range("b197").Value, "mm/dd/yyyy")
    

    如果 B 列中的值确实是日期,使用公式计算并格式化为 mm/dd,则 Find 将与 LDate 作为字符串和 LookIn:=xlValues 一起使用,即使它们没有显示年份。

    【讨论】:

    • 感谢您的回复。我按以下方式生成列,在 B3 中手动输入“1/1/2020”,在 B4 中使用 =B3+1 并将公式复制到所有后续单元格中。我只是尝试搜索初始单元格“B3”而不是“B197”,这次Find 返回正确的单元格内容。似乎 B4 和以下单元格不记录原始日期格式
    • 啊!那么您应该查看 xlValues,而不是 xlFormulas。您的公式不包含日期。
    • 使用Range().Text 确实可以解决问题,但有一个限制:根据我的excel设置它只返回“mm/dd”。以后我将使用Dim LDate As String LDate = Date ,它将给出“mm/dd/yyyy”格式,搜索将失败。我可以进行字符串操作以从Date 获取“mm/dd”,但它会丢失年份信息,如果我的时间表超过一年,它将返回多个匹配项。如果我不想将 B 列中的格式选项从“mm/dd”更改为“mm/dd/yyyy”,是否仍可以将年份信息保留在 xlVlaue 中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2019-03-04
    • 2021-12-07
    相关资源
    最近更新 更多