NOTA: En una búsqueda siempre se debe contemplar la posibilidad de que no se encuentre el dato buscado.
1 - Con método FIND:
Contamos con una hoja donde se encuentran 2 tablas semestrales (Hoja2). La intención es volcar datos de esas tablas a otra hoja (Hoja1) donde se encuentra el resumen anual.
En este ejemplo solo se tendrá 1 registro o contrato por cada mes.
La macro colocada en un módulo será la siguiente y se ejecutará desde la Hoja1 (hoja resumen anual).
Sub macroBusca()
'x Elsamatilde
'recorre la col A de hoja1... hoja activa
Sheets("Hoja1").Select
fini = Range("A"
& Rows.Count).End(xlUp).Row
'tomo el rango desde fila 2 hasta la última con
datos (fini) ....AJUSTAR
For i = 2 To fini
dato =
Range("A" & i)
Set busco = Sheets("Hoja2").Range("B:H").Find(dato, LookIn:=xlValues, lookat:=xlWhole)
Set busco = Sheets("Hoja2").Range("B:H").Find(dato, LookIn:=xlValues, lookat:=xlWhole)
'si lo encuentra vuelca el resultado en col B y C
de hoja 1
If Not busco Is Nothing
Then
Range("B" & i) = busco.Offset(0, 1) 'devuelve info a
derecha
Range("C" & i) = busco.Offset(0, 2)
Else
'opcional: dejar
un texto en celdas B y C
Range("B" &
i) = "Sin datos": Range("C" & i) = "Sin
datos"
End If
'sigue con la otra fila
Next i
MsgBox "Fin de la búsqueda"
End Sub
Con el método FIND programado de este modo (con control de dato encontrado o no - ver aclaraciones en entrada de Febrero 2019) le indicamos qué resultado debe volcar en caso de no encontrar algún registro o mes en este caso.
2- Con resultado de la función BUSCARV:
Para este caso, contaremos con una tabla de datos de varias columnas, de las que solo necesitaremos obtener el resultado de dos de ellas. La tabla resumen será igual a la anterior.
Suponiendo que en nuestra tabla de resumen no queremos colocar fórmulas sino solamente el valor encontrado, la macro a utilizar sería la siguiente:
Sub
macroFormulaControlada()
'x Elsamatilde
Sheets("Hoja1").Select
'recorre la col A de
la hoja activa hasta la última celda con datos.
fini = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To fini
dato = Range("A" & i)
'el control de error nos permite devolver otro
valor o texto en caso de dato no encontrado
On Error Resume Next
Range("B" & i) =
Application.WorksheetFunction.VLookup(dato,
Sheets("Hoja2").Range("B:D"), 2, False)
'si la función devolvió error se coloca un texto
aclaratorio
If Err.Number > 0 Then Range("B" &
i) = "Sin datos"
Range("C" & i) =
Application.WorksheetFunction.VLookup(dato,
Sheets("Hoja2").Range("B:D"), 3, False)
If Err.Number > 0 Then Range("C"
& i) = "Sin datos"
Next i
End Sub
Ver VIDEO N° 25.
No hay comentarios.:
Publicar un comentario