VBA Arrays - Check strict (not approximative) match

后端 未结 4 2000
终归单人心
终归单人心 2020-12-11 10:08
If UBound(Filter(myArray, Sheets(i).Cells(1, j).Value, True)) = -1 Then
 \'take action
End if

I used this syntax to compare an element found in Cel

4条回答
  •  情歌与酒
    2020-12-11 10:27

    Filter will return any items that partially match. The work around suggested by Microsoft is to then search the filtered array for exact matches.

    Function FilterExactMatch(astrItems() As String, _
                              strSearch As String) As String()
    
       ' This function searches a string array for elements
       ' that exactly match the search string.
    
       Dim astrFilter()   As String
       Dim astrTemp()       As String
       Dim lngUpper         As Long
       Dim lngLower         As Long
       Dim lngIndex         As Long
       Dim lngCount         As Long
    
       ' Filter array for search string.
       astrFilter = Filter(astrItems, strSearch)
    
       ' Store upper and lower bounds of resulting array.
       lngUpper = UBound(astrFilter)
       lngLower = LBound(astrFilter)
    
       ' Resize temporary array to be same size.
       ReDim astrTemp(lngLower To lngUpper)
    
       ' Loop through each element in filtered array.
       For lngIndex = lngLower To lngUpper
          ' Check that element matches search string exactly.
          If astrFilter(lngIndex) = strSearch Then
             ' Store elements that match exactly in another array.
             astrTemp(lngCount) = strSearch
             lngCount = lngCount + 1
          End If
       Next lngIndex
    
       ' Resize array containing exact matches.
       ReDim Preserve astrTemp(lngLower To lngCount - 1)
    
       ' Return array containing exact matches.
       FilterExactMatch = astrTemp
    End Function
    

    This code is taken from http://msdn.microsoft.com/en-us/library/office/aa164525%28v=office.10%29.aspx

提交回复
热议问题