View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.misc
Dave Peterson Dave Peterson is offline
external usenet poster
 
Posts: 35,218
Default match function - date and time

It's not really the format of the value that's important. It's the value inside
the cell.

And with date/times, I've had trouble using application.match in VBA. I would
expect that it's some sort of rounding difference.

Here's a routine that tries to use application.match and fails (with my test
data), but using application.evaluate will find the match.

Option Explicit
Sub testme()

Dim res As Variant
Dim LookupRng As Range
Dim wks As Worksheet
Dim myDate As Date
Dim myFormula As String

Set wks = Worksheets("sheet1")

myDate = DateSerial(2008, 1, 19) + TimeSerial(12, 48, 0)

With wks
Set LookupRng = .Range("a1", .Cells(.Rows.Count, "A").End(xlUp))
End With

'this returned an error
res = Application.Match(CDbl(myDate), LookupRng, 0)

If IsError(res) Then
MsgBox "no match"
Else
MsgBox "Match on row: " & res
End If

'but this worked ok
myFormula = "MATCH(TEXT(" & CDbl(myDate) _
& ",""yyyymmdd hhmm""),TEXT(" _
& LookupRng.Address(external:=True) _
& ",""yyyymmdd hhmm""),0)"

res = Application.Evaluate(myFormula)

If IsError(res) Then
MsgBox "no match"
Else
MsgBox "Match on row: " & res
End If

End Sub

The myFormula string is the same kind of thing as this array formula in a
worksheet cell:

=MATCH(TEXT(C1,"yyyymmdd hhmm"),TEXT(Sheet1!$A$1:$A$22,"yyyymmdd hhmm"),0)

If you need to use seconds, then both formatting strings will look like:
"yyyymmdd hhmmss"



"CG Rosén" wrote:

Good evening Group,

Have been looking in the archive but not found a complete answer.

Is it possible to use the MATCH function in VBA when looking
for a date/time in format "YYYY-MM-DD hh:mm"? The lookup array
is in the same format.

Brgds

CG Rosen


--

Dave Peterson