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()'recorre la col A de hoja1... hoja activaSheets("Hoja1").Selectfini = Range("A" & Rows.Count).End(xlUp).Row'tomo el rango desde fila 2 hasta la última con datos (fini) ....AJUSTARFor i = 2 To finidato = Range("A" & i)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 1If Not busco Is Nothing ThenRange("B" & i) = busco.Offset(0, 1) 'devuelve info a derechaRange("C" & i) = busco.Offset(0, 2)Else'opcional: dejar un texto en celdas B y CRange("B" & i) = "Sin datos": Range("C" & i) = "Sin datos"End If'sigue con la otra filaNext iMsgBox "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()Sheets("Hoja1").Select'recorre la col A de la hoja activa hasta la última celda con datos.fini = Range("A" & Rows.Count).End(xlUp).RowFor i = 2 To finidato = Range("A" & i)'el control de error nos permite devolver otro valor o texto en caso de dato no encontradoOn Error Resume NextRange("B" & i) = Application.WorksheetFunction.VLookup(dato, Sheets("Hoja2").Range("B:D"), 2, False)'si la función devolvió error se coloca un texto aclaratorioIf 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 iEnd Sub
Descargar ejemplo desde aquí
Acceso al VIDEO N° 25.
No hay comentarios.:
Publicar un comentario