Cuando tenemos que buscar celdas con un contenido concreto, desde dentro de una macro, recurrimos demasiadas veces a la busqueda secuencial y a las funciones BUSCARx, cuando tenemos una función que podemos usar la mayoría de las veces y con la que podemos trabajar muy cómodamente; se trata de Find.
Find busca dentro de un rango, aunque solo lo puede hacer con string completas, puede buscar también celdas especiales.
Lo primero de todo: busca dentro de un rango, si le indicamos, p.ej:,
ActiveSheet.Find …..
la búsqueda la realizara en la hoja activa; pero si decimos
Range(«A1:B54»).Find…
la búsqueda se restringirá al rango A1:B54, lo que nos puede ir muy bien para encontrar los datos dentro del ámbito buscado…Así mismo, las búsquedas no se detienen por celdas en blanco.
Respecto a los parámetros que podemos usar, os indicamos los que pensamos que pueden ser mas útiles, y si necesitáis mas información, y mientras no preparemos nuestras paginas, os dejo el enlace a la de microsoft: http://msdn.microsoft.com/en-us/library/office/ff839746.aspx
El único parámetro obligatorio es el que establece lo que queremos buscar, y que es:
what:=»valor a buscar»
Tan solo con esto, la instrucción nos devolverá la celda en la que se encuentre el valor buscado o nothing, en caso de que no lo halle.
After:=celda
Le podemos indicar a partir de que celda queremos empezar a buscar
lookIn:=donde buscar
Con dos opciones: buscar en valores (xlValues) y buscar en formulas (xlFormula)
LookAt:=como buscar
con xlWhole para búsquedas de palabra exacta, o xlPart para búsquedas con parte de la palabra
SearchOrder:= orden de busqueda
para indicarle si queremos realizar la busqueda por filas(xlRows) o por columnas(xlColumns)
SearchDirection:= direccion de la busqueda
Pensado para continuar con la busqueda con dos posibles opciones:
- xlNext – Continuar con siguiente
- xlPrevious-Continuar con anterior
MatchCase:=true/false
Para indicar si ha de detectar mayúsculas y minúsculas
Ejemplos:
Buscar la cadena CASA y poner el valor HOGAR solo en la columna A
zona=Range("A:A") Set c = zona.Find("CASA", lookin:=xlValues) If Not c Is Nothing Then inicio= c.Address Do c.Value = "HOGAR" Set c = zona.FindNext(c) Loop While Not c Is Nothing And c.Address <> inicio End If
Encontrar la ultima celda con datos
Set ultima = Cells(Cells.Find(What:="*", SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _ Cells.Find(What:="*", SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Column)
Encontrar la primera celda con datos
Set primera= Cells(Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlRows, _ SearchDirection:=xlNext, LookIn:=xlValues).Row, _ Cells.Find(What:="*", After:=LastCell, SearchOrder:=xlByColumns, _ SearchDirection:=xlNext, LookIn:=xlValues).Column)