我需要找到包含日期时间值的第一个单元格。
我感兴趣的单元格显示了这个
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
答案 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