Buscar en varias hojas con Macros

Tengo un libro con 4 hojas, en una de ellas se tienen la base a llenar y el resto contiene los datos a buscar.

Hay que traer los datos: de la hoja Precio (columna c), de la hoja ubicación (columnas b y c) y de la hoja centro costo (columnas c y d), según datos de búsqueda, a la hoja base.

El dato a buscar es el que se encuentra en la columna A de la hoja Base en el resto de las hojas.

Si en alguna de las columnas no se encontrara registro dejar "No existe".

Se quiere trabajar con macros porque los registros son innumerables.

1 respuesta

Respuesta
1

Para entender en dónde buscar, qué dato traer y en dónde ponerlo puedes poner 4 imágenes, una de cada hoja.

Por ejemplo, supongo que la imagen que pusiste es la hoja base a llenar. La columna Precio se llena de la información de la hoja "Precio", ¿pero en la hoja "Precio" en qué columna está el código? ¿Y en qué columna está el precio?

Si te anexo la macro suponiendo en dónde se encuentran los datos, después hay que cambiar la macro a los datos reales, mejor dime en dónde se encuentran los datos en cada hoja.

Hola

Se adjuntan antecedentes.

De todas maneras se trata de ir ampliando en el futuro los registros y los datos a buscar.

Hoja Base

Hoja Precio (lleva a hoja Base Precio)

Hoja Ubicación (lleva a hoja Base Nombre y Capital)

Hoja Centro costo (lleva a hoja Base Costo y Denominación)

Te anexo la macro

Sub LlenarBase()
'Por.Dante Amor
    Set h1 = Sheets("base")
    Set h2 = Sheets("precio")
    Set h3 = Sheets("ubicacion")
    Set h4 = Sheets("centro costo")
    '
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        cod = h1.Cells(i, "A")
        Set b = h2.Columns("A").Find(cod, lookat:=xlWhole)
        If Not b Is Nothing Then
            h1.Cells(i, "C") = IIf(b.Offset(0, 1) <> "", b.Offset(0, 1), "No existe")
        Else
            h1.Cells(i, "C") = "No se encontró el código"
        End If
        '
        Set b = h3.Columns("A").Find(cod, lookat:=xlWhole)
        If Not b Is Nothing Then
            h1.Cells(i, "B") = IIf(b.Offset(0, 1) <> "", b.Offset(0, 1), "No existe")
            h1.Cells(i, "D") = IIf(b.Offset(0, 2) <> "", b.Offset(0, 2), "No existe")
        Else
            h1.Cells(i, "B") = "No se encontró el código"
            h1.Cells(i, "D") = "No se encontró el código"
        End If
        '
        Set b = h4.Columns("A").Find(cod, lookat:=xlWhole)
        If Not b Is Nothing Then
            h1.Cells(i, "E") = IIf(b.Offset(0, 2) <> "", b.Offset(0, 2), "No existe")
            h1.Cells(i, "F") = IIf(b.Offset(0, 3) <> "", b.Offset(0, 3), "No existe")
        Else
            h1.Cells(i, "E") = "No se encontró el código"
            h1.Cells(i, "F") = "No se encontró el código"
        End If
    Next
End Sub

No importa cuántos registros tengas en base, la macro los va a buscar.

Saludos. Dante Amor

Recuerda valorar la respuesta.

Perfecto maestro

Una última solicitud.

La macro me puede traer el encabezado de las columnas?

En algún momento puedo agregar datos al reporte y la información debe generarse correctamente.

En este caso: Nombre, Precio, capital, Costo y Denominación.

Te anexo la macro con los cambios

Sub LlenarBase()
'Por.Dante Amor
    Set h1 = Sheets("base")
    Set h2 = Sheets("precio")
    Set h3 = Sheets("ubicacion")
    Set h4 = Sheets("centro costo")
    '
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        cod = h1.Cells(i, "A")
        Set b = h2.Columns("A").Find(cod, lookat:=xlWhole)
        If Not b Is Nothing Then
            h1.Cells(i, "C") = IIf(b.Offset(0, 1) <> "", b.Offset(0, 1), "No existe")
            h1.Cells(1, "C") = h2.Cells(1, "B")
        Else
            h1.Cells(i, "C") = "No se encontró el código"
        End If
        '
        Set b = h3.Columns("A").Find(cod, lookat:=xlWhole)
        If Not b Is Nothing Then
            h1.Cells(i, "B") = IIf(b.Offset(0, 1) <> "", b.Offset(0, 1), "No existe")
            h1.Cells(i, "D") = IIf(b.Offset(0, 2) <> "", b.Offset(0, 2), "No existe")
            h1.Cells(1, "B") = h3.Cells(1, "B")
            h1.Cells(1, "D") = h3.Cells(1, "C")
        Else
            h1.Cells(i, "B") = "No se encontró el código"
            h1.Cells(i, "D") = "No se encontró el código"
        End If
        '
        Set b = h4.Columns("A").Find(cod, lookat:=xlWhole)
        If Not b Is Nothing Then
            h1.Cells(i, "E") = IIf(b.Offset(0, 2) <> "", b.Offset(0, 2), "No existe")
            h1.Cells(i, "F") = IIf(b.Offset(0, 3) <> "", b.Offset(0, 3), "No existe")
            h1.Cells(1, "E") = h4.Cells(1, "C")
            h1.Cells(1, "F") = h4.Cells(1, "D")
        Else
            h1.Cells(i, "E") = "No se encontró el código"
            h1.Cells(i, "F") = "No se encontró el código"
        End If
    Next
End Sub

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas