Macro que compara dos libros y si cumplen una condición POR Copia de un libro a otro

Tengo dos libros de Excel con un reporte que recibo todos los meses. En la columna (I) donde aparece el nombre, a veces escriben el nombre del distribuidor y otras veces el nombre del representante, así que en la columna (H) debo escribir solo el nombre del distribuidor.

En el libro 1 hice los cambios manualmente, ahora quiero una macro que compare la columna I del libro 1 con la columna I del libro 2 y si tienen el mismo nombre, escriba en el libro 2 el nombre que aparece en la columna H del libro 1 a la columna H del libro 2.

PUES. La columna h del libro 2 esta vacía y se llenara con los datos que estén en el libro 1 columna h

Respuesta
2

Te anexo la macro para actualizar el libro2, cambia en la macro por los nombres de tu libro y de tus hojas.

Sub Comparar()
'Por.Dante Amor
    Set l1 = ThisWorkbook   'libro1 con la macro
    Set h1 = l1.Sheets("Hoja1")         'hoja1 del libro1
    Set l2 = Workbooks("Libro2.xlsx")   'libro2 para ser llenado, debe estar abierto
    Set h2 = l2.Sheets("Hoja1")         'hoja1 del libro2
    '
    For i = 1 To h1.Range("H" & Rows.Count).End(xlUp).Row
        Set b = h2.Columns("H").Find(h1.Cells(i, "H"), lookat:=xlWhole)
        If Not b Is Nothing Then
            h2.Cells(b.Row, "I") = h1.Cells(i, "I")
        End If
    Next
    MsgBox "Fin"
End Sub

sal u dos

Hola dante

Copie la macro y cambie los nombres de los libros y las hojas así:

Sub Comparar()
'Por.Dante Amor
    Set l1 = ThisWorkbook   'libro1 con la macro
    Set h1 = l1.Sheets("Vereinigung ohne Duplikat")         'hoja1 del libro1
    Set l2 = Workbooks("Zusammenfassung ImmobilienAngeboten Marz.xlsx")   'libro2 para ser llenado, debe estar abierto
    Set h2 = l2.Sheets("Vereinigung ohne Duplikat")         'hoja1 del libro2
    '
    For i = 1 To h1.Range("H" & Rows.Count).End(xlUp).Row
        Set b = h2.Columns("H").Find(h1.Cells(i, "H"), lookat:=xlWhole)
        If Not b Is Nothing Then
            h2.Cells(b.Row, "I") = h1.Cells(i, "I")
        End If
    Next
    MsgBox "End"
End Sub

Pero la macro no Copia los datos.

LA macro debería comparar la columna I de ambos libro y si el nombre del cliente aparece en el libro 1 y en el libro 2 entonces debe copiar el nombre del cliente que esta en la columna I del libro 1 a la columna I del libro2.

Gracias por tu ayuda.

Tienes razón lo puse al revés, te anexo la macro actualizada

Sub Comparar()
'Por.Dante Amor
    Set l1 = ThisWorkbook   'libro1 con la macro
    Set h1 = l1.Sheets("Hoja1")         'hoja1 del libro1
    Set l2 = Workbooks("Libro2.xlsx")   'libro2 para ser llenado, debe estar abierto
    Set h2 = l2.Sheets("Hoja1")         'hoja1 del libro2
    '
    For i = 1 To h1.Range("I" & Rows.Count).End(xlUp).Row
        Set b = h2.Columns("I").Find(h1.Cells(i, "I"), lookat:=xlWhole)
        If Not b Is Nothing Then
            h2.Cells(b.Row, "H") = h1.Cells(i, "H")
        End If
    Next
    MsgBox "Fin"
End Sub

sal u dos

gsdfgsdfg

Hola dante

Hice los cambios en la macro pero ahora me da un error en esta línea

Set l2 = Workbooks("Libro2.xlsx")   'libro2 para ser llenado, debe estar abierto

Y me gustaría entender la macro, a partir del bucle for no entiendo lo que hace.

Hola dante

Hice los cambios en la macro pero ahora me da un error en esta línea

Set l2 = Workbooks("Libro2.xlsx")   'libro2 para ser llenado, debe estar abierto

Y me gustaría entender la macro, a partir del bucle for no entiendo lo que hace.

Te anexo la macro con explicación en cada línea. Te recuerdo que el libro2 debe estar abierto

Y tienes que cambiar libro2.xlsx por el nombre de tu libro, con todo y extensión.

Sub Comparar()
'Por.Dante Amor
    'estabalece en el objeto l1 este libro
    Set l1 = ThisWorkbook               'libro1 con la macro
    'establece en el objeto h1 la hoja1 de este libro
    Set h1 = l1.Sheets("Hoja1")         'hoja1 del libro1
    'establece en el objeto l2 el libro "libro2.xlsx" el caula debe estar abierto
    Set l2 = Workbooks("Libro2.xlsx")   'libro2 para ser llenado, debe estar abierto
    'establece en h2 la hoja1 del libro2
    Set h2 = l2.Sheets("Hoja1")         'hoja1 del libro2
    '
    'inicia el ciclo desde la fila 1 y hasta la última fila con datos de la columna I
    For i = 1 To h1.Range("I" & Rows.Count).End(xlUp).Row
        'establce en b el resultado de la búsqueda de celda (i, "I"), la búsqueda en la celda es total
        Set b = h2.Columns("I").Find(h1.Cells(i, "I"), lookat:=xlWhole)
        'si b no está vacío, significa que encontró un dato
        If Not b Is Nothing Then
            'entonces en el libro 2 en la fila encontrada pero en "H"
            'pone el dato de la hoja1 fila i columna "H"
            h2.Cells(b.Row, "H") = h1.Cells(i, "H")
        End If
    Next
    MsgBox "Fin"
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas