match function - date and time

C

CG Rosén

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
 
D

Dave Peterson

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"
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top