在根据公式计算的范围内查找date,并使用英国date格式设置格式

我想返回date所在的单元格。 B列中每个date有一个发生率,格式为dd/mm/yyyy 。 这是从上面的单元格计算的(例如,使用=B3+7 )。

我设法检索使用application.vlookupdate,所以我知道这是“有”。 即时窗口给出正确的date使用? activecell.value ? activecell.value

我无法得到range.find函数返回任何东西。 如果我input美国date格式的string(例如09/23/2014)到列中,那么range.find会返回一个值,但对于英国格式化的date( =23/09/2014 23/09/2014),它将返回Nothing

range.find函数是否只能处理美国的date?

 Sub columnfind() Dim DateRow, correctCell As Range Set DateRow = ActiveSheet.Range("a1:B1000") Dim strCurrentDate As String Dim IntDate As Long IntDate = CLng(CDbl(Now())) strCurrentDate = Format(Now, "mm/dd/yyyy") Set correctCell = DateRow.Find(IntDate, LookIn:=xlValues, lookat:=xlPart) Set correctCell = DateRow.Find(strCurrentDate) Set correctCell = DateRow.Find(Date) cell = Application.VLookup(IntDate - 1, ActiveSheet.Range("B1:B1000"), 1, 1)'verify existence of date for my sanity End Sub 

。 。

你可以使用像这样的东西:

 Range("A1").Select Application.FindFormat.Clear Application.FindFormat.NumberFormat = "dd/mm/yy;@" Set h = Range("A1:A4").Find("21/03", , , , , , , , True) MsgBox h.Address 

您可以使用Find方法中的bool SearchFormat选项来定义date的格式。

如果Find()不适用于某些格式,请不要使用它:

 Sub ColumnFind() Dim bRng As Range, r As Range Set bRng = Range("B1:B1000") For Each r In bRng If r.Text = "23/9/2014" Then MsgBox r.Address(0, 0) End If Next r End Sub 

要么

 Sub ColumnFind() Dim bRng As Range, r As Range Dim sDate As String sDate = Format(Date, "dd/m/yyyy") Set bRng = Range("B1:B1000") For Each r In bRng If r.Text = sDate Then MsgBox r.Address(0, 0) End If Next r End Sub 

现在这是我的解决方法,如果range.find不适用于非美国date是真的。

 Sub columnfind() Dim DateCol, correctCell As Range Set DateCol = ActiveSheet.Range("B1:B1000") Dim strCurrentDate As String DateCol.NumberFormat = "mm/dd/yy;@" strCurrentDate = Format(Now, "mm/dd/yy") DateCol.Find(strCurrentDate).Select DateCol.NumberFormat = "m/d/yyyy" End Sub