Comparar 2 hojas y copiar coincidencias a una tercer hoja

Estoy comenzando a usar Excel y necesito hacer una planilla que en la Hoja 1 realice una macro la cual compara algunas columnas(NO TODAS) de la hoja 2 con la hoja 3, y si los datos son correctos en las dos hojas que los pinte de cierto color y pueda copiar esos datos que coincidan a una Tercer hoja. Queria saber si me pueden ayudar!

1 Respuesta

Respuesta
1

¿Especifica qué columnas quieres comparar?, ¿Son los datos coloreados los que quieres copiar o los que no?, si puedes sube una pantalla de tus datos así se evita el tener que hacer suposiciones que por lo general son erróneas.

Gracias James, 

Son 16 Columnas por Hoja de las cuales quiero comparar si coinciden solo 6 Columnas 

Si los valores de las 6 columnas coicinden entonces copiar en una nueva Hoja los registros completos que (14 columnas) que tuvieron coincidencia en esas 6 columnas. A Continuacion te listo los nombres de las 14 Columnas y aparte de las 6 columnas que deseo que coincidan la info.

Espero puedas ayudarme. Saludos!

Gabriel

Esta macro funciona siempre y cuando las tablas de la hoja1 y la hoja2 sean exactamente iguales, lo que hará es leer la información de la ambas hojas y creara dos tablas temporales las cuales concatenara en las columnas que indicaste quedándote solo 2 cadenas de datos, las cuales compara de ser iguales las cadenas ira a la hoja 1 y tomara los datos correspondientes a la fila que se repite en ambas hojas y las copiara a la hoja3 además de colorear de verde la hoja1 en aquellos datos que son iguales en ambas hojas.

Esta es la macro

Option Base 1
Sub COPIAR_DATOS()
Set DATOS = Worksheets("HOJA1").Range("A1").CurrentRegion
For I = 1 To 2
    Set HD = Worksheets("HOJA" & I).Range("A1").CurrentRegion
    With HD
        FILAS = .Rows.Count: COL = .Columns.Count
        If I = 1 Then Set TABLA = .Columns(COL + 3).Resize(FILAS, 6)
        If I > 1 Then Set TABLA = TABLA.Columns(8).Resize(FILAS, 6)
        Union(.Columns(1), .Columns(3), .Columns(4), .Columns(6), .Columns(7), .Columns(13)).Copy
    End With
    With TABLA
        .PasteSpecial
        FILAS2 = .Rows.Count
        ReDim MATRIZ(FILAS)
        For J = 1 To FILAS2
            MATRIZ(J) = Join(Application.Index(.Rows(J).Value, 1, 0), "|")
        Next J
    .CurrentRegion.Clear
    Range(.Columns(1).Address) = Application.Transpose(MATRIZ)
    .CurrentRegion.Name = "TABLA_" & I
    End With
Next I
With Range("TABLA_1")
X = 1
    For I = 1 To FILAS
        INFO = .Cells(I, 1)
        CUENTA = WorksheetFunction.CountIf(Range("TABLA_2"), INFO)
        If CUENTA = 1 Then
        HD.Rows(I).Copy
        Sheets("HOJA3").Range("A1").Rows(X).PasteSpecial: X = X + 1
        DATOS.Rows(I).Interior.ColorIndex = 4
        End If
    Next I
End With
Erase MATRIZ
Range("TABLA_1").ClearContents
Range("TABLA_2").ClearContents
Set DATOS = Nothing: Set HD = Nothing
Set TABLA = Nothing: Set TABLA2 = Nothing
End Sub

Gracias James! Me sirvió mucho! Saludos!

Hola James como puedo hacer en el caso inverso? que copie en la Hoja 3 las que NO coinciden?. Espero me puedas ayudar. Gracias!

Ya lo solucione James. Gracias!

James si yo quisiera solo que compare 3 columnas (num_comprobante, cuit y total) y no 6 como hablamos al principio, ¿dónde debería modificar la macro que compara las dos cadenas de caracteres? No logro darme cuenta. Perdón.

Saludos!

Esta línea es la que base para que forma la cadena de comparación, eilimina tres .columns y a los que quedan le das el numero de la columna que quieras copiar por ejemplo .columns(1)=fecha, .columns(2)=cuit

        Union(.Columns(1), .Columns(3), .Columns(4), .Columns(6), .Columns(7), .Columns(13)).Copy

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas