如何在Excel工作表中查找日期时间值

时间:2015-03-06 15:12:22

标签: excel vba excel-vba datetime

我需要找到包含日期时间值的第一个单元格。

我感兴趣的单元格显示了这个

  

06-Mrz-2015 00:00

它的公式字段有这个(日期部分后面的两个空格)

06.03.2015  00:00:00

单元格格式为

DD-MMM-YYYY hh:mm

我尝试了这个,但它找不到单元格

Public Function FindCurrentCell() As Range

Dim cell As Range
Dim current As String

Sheets("Futures").Select

current = Format(Date, "dd.mm.yyyy") + "  00:00:00"

Set cell = Cells.Find(What:=current, After:=Range("A1"), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

Dim test As String
test = cell.Address

Set FindCurrentCell = cell

End Function

1 个答案:

答案 0 :(得分:1)

如果您在网上搜索,您会发现许多网站告诉您如何查找日期。然而,他们把答案作为一个魔法咒语:“做这个复杂的一系列步骤,它会起作用。”麻烦的是:如果它不起作用你会怎么做?

显然你需要:

.Cells.Find(What:=DateValue(Format(DateWanted, "dd/mm/yyyy")))

其中“dd / mm / yyyy”代表您所在国家/地区的Excel标准日期格式。

我发现“dd / mm / yyyy”的变化不会让我成功找到您希望的日期格式。

问题的根源是Excel如何存储日期。在我输入时,它是2015年3月7日的9:23。如果我在立即窗口中输入? CDbl(Date)CDbl(Now()),我会得到:

? CDbl(Date)
 42070 
? CDbl(Now())
 42070.3911805556

42070是自1900年1月1日以来的日期数。。3911是(自午夜以来的秒数)除以(一天中的秒数)。

因此,如果我在单元格中看到“2015年3月7日”或“7/3/15”,我知道,在幕后,Excel持有42070 .NumberFormat告诉它42070是一个日期,如何显示该日期。

专家告诉你,在DateValue(Format(DateWanted, "dd/mm/yyyy")))中,你需要获得“dd / mm / yyyy”,就像Excel期望格式化日期一样。这句话的问题是,DateValue将丢弃所有仔细的格式并返回日期,那么重点是什么?

关于格式的所有这些建议不仅仅是垃圾,而且显然是有害的垃圾。重要的是日期类型的“什么价值”。例如,以下两个都有效:

Cells.Find(What:=Date)

Dim SearchDate As Date: SearchDate = Date
Cells.Find(What:=SearchDate)

我要提醒你,日期必须完全匹配;例如,搜索“2015年3月7日”将找不到“7 Match 2015 9:00”。事实上,这是不真实的。看起来对这种效果的重复建议只有在你对格式化大惊小怪时才会出现。

Sub Test()

  Dim RngToday As Range

  Set RngToday = FindCurrentCell

  If RngToday Is Nothing Then
    Debug.Print "Today's date not found"
  Else
    Debug.Print "Today’s date in " & RngToday.Address
  End If

End Sub
Public Function FindCurrentCell() As Range

  Dim cell As Range

  With Worksheets("Futures")

    Set cell = .Cells.Find(What:=Date, After:=.Range("A1"), LookIn:=xlFormulas, _
                           SearchOrder:=xlByRows, SearchDirection:=xlNext)
    If cell Is Nothing Then
      ' Today's date not found
      ' Add any appropriate code
    Else
      ' Today's date found
      ' Add any appropriate code
    End If

  End With

  Set FindCurrentCell = cell

End Function