Gli ultimi saranno i primi... chi cerca trova

Una semplice funzioncina da tenere sott'olio per farsi restituire l'ultima occorrenza di una stringa, in un range dato. Si può specificare se per la ricerca della la stringa si usa il metodo della "parola intera" o della "parte di testo". L'idea è nata dal voler migliorare questo codice, di ricerca brutale a partire dal fondo del range specificato, per farsi restituire l'ultima ricorrenza della stringa cercata:
Option Explicit

Sub find_last_in_cell()
Dim cell As Range, ur As Long, i As Long
    ur = Range("A" & Columns(1).Rows.Count).End(xlUp).Row
    For i = ur To 1 Step -1
        If Cells(i, "A") = "15/03/2015" Then
            Cells(i, "A").Select
            MsgBox "Value " & _
Cells(i, "A") & _
" found at " & Cells(i, "A").Address
            Exit For
        End If
    Next
End Sub
Ecco la funzione migliorata:
Option Explicit

Function find_last(r As Range, text As String, _
Optional exact_match As Boolean = False) As String
Dim c As Range, v As Variant
    If IsDate(text) Then v = CDate(text) Else v = text
    Set c = r.Find(What:=v, After:=r.Cells(1), _
LookAt:=Abs(xlPart Or exact_match), SearchDirection:=xlPrevious)
    If c Is Nothing Then
        find_last = "NOT FOUND"
    Else
        find_last = c.Address
    End If
End Function
Il parametro opzionale "exact_match" è False di proposito, sicché viene sempre cercata la parziale corrispondenza della stringa cercata. Funziona coi range di Excel ma con un po' di fantasia si può estendere ai vettori :o)

posted @ lunedì 23 marzo 2015 15:37

Print

Comments on this entry:

No comments posted yet.

Your comment:



 (will not be displayed)


 
 
 
Please add 2 and 8 and type the answer here:
 

Live Comment Preview: