How to make match() work with date in excel vba?

后端 未结 6 686
萌比男神i
萌比男神i 2021-01-13 04:16

I\'m having problem making the match() work in excel VBA. The code is:

x = Application.Match(\"Sep 2008\", Range(\"F1:F1\"), 0)

The value i

6条回答
  •  星月不相逢
    2021-01-13 04:26

    The reason why Even if I changed Sep 2008 to 9/1/2008, it still doesn't return any value.

    Is because when there is a Date in excel, Excel automatically converts that date to a numeric value, What you really want to search for is:

    39692

    This number is the number of days between 9/1/2008 and excel default of 1/1/1900

    every date in excel is stored with a value like this. So the easiest way to handle this would be to convert what you see as a date to what excel sees as a date using CDate().

    This by itself will give you an unuseful error that vba can't get the property.

    That is because the Lookup_value can be a value (number, text, or logical value) or a cell reference to a number, text, or logical value. Not a date so simply convert the now date value to a number to search for the matching number in the list using CLng()

    Give this a shot it will also be much faster then using the Find alternative:

    x = WorksheetFunction.Match(CLng(CDate("Sep 2008")), Range("F1:F1"), 0)
    

    This should give you the result expected

    To handle when no match is found try this Sub:

    Sub MatchDate()
    Dim myvalue As Double
    Dim LastRow As Long
    
    LastRow = Cells(Rows.Count, "F").End(xlUp)
    
    On Error GoTo NotFound
    myvalue = WorksheetFunction.Match(CLng(CDate("Sep 2008")), Range("F1:F" & LastRow), 0)
    MsgBox (myvalue)
    End
    
    NotFound:
    MsgBox ("No Match Was Found")
    End
    
    End:
    End Sub
    

提交回复
热议问题