Excel 2003: Macro para copiar valores de una hoja y pegar en otra hoja (sí y solo sí estos valores no existen en el destino)

Para Dante Amor y Elsa Matilde

Buenas noches, he estado buscando en la página y encontré un tema (Macro Copiar Valores Únicos de una hoja a otra hoja de excel) que responde en parte a mi pregunta, pero no logro hacer funcionar la macro en Excel 2003 asi que abro de nuevo este tema. Les explico mi situación:

  • Ocupo dos hojas: ORIGEN y DESTINO, respectivamente.
  • En la hoja ORIGEN tengo los datos que van a ir variando en cantidad, y los tengo organizados en las columnas A, B y C desde la fila 5.
  • En la hoja DESTINO los datos copiados deberían pegarse desde la fila 2, en las columnas D, E, F.
  • Solo debería quedar en la hoja DESTINO valores únicos (usando como referencia los datos de la columna A de la hoja ORIGEN)

Ahora bien, quiero usar una macro en excel 2003 para hacer esta tarea y no he podido encontrar por mis medios una solución.

Desde ya, gra_ci_as!

2 respuestas

Respuesta
1

H o l a :

Te anexo  una macro para copiar los únicos

Sub CopiarUnicos()
'Por.Dante Amor
    Set h1 = Sheets("origen")
    Set h2 = Sheets("destino")
    j = 2
    For i = 5 To h1.Range("A" & Rows.Count).End(xlUp).Row
        Set b = h2.Columns("D").Find(h1.Cells(i, "A"), lookat:=xlWhole)
        If b Is Nothing Then
            h1.Range(h1.Cells(i, "A"), h1.Cells(i, "C")).Copy h2.Cells(j, "D")
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub

':)
S a l u d o s . D a n t e   A m o r
':) Si es lo que necesitas. Recuerda valorar la respuesta. G r a c i a s.

¡Gracias! Funciona de manera excelente Dante Amor 

Estaba probando la macro con varios valores, resulta que tengo un problema: después de usar la macro dos veces, me borra el primer dato que copio en la hoja DESTINO. (es decir que tengo 3 datos distintos en la hoja ORIGEN y solo dos datos en la hoja DESTINO). ¿Qué puede estar sucediendo?

La macro no borra, está sobreescribiendo.

La macro siempre empieza a pegar en la fila 2:

"En la hoja DESTINO los datos copiados deberían pegarse desde la fila 2"

Si quieres otro resultado, explica cómo lo quieres. Crea una nueva pregunta y me explicas con ejemplos cómo lo quieres en la primera ejecución, cómo lo quieres enl a segunda ejecución, etc.

Sal u dos

Si sobreescribiera los datos deberían estar todavía en la hoja DESTINO, pero siempre desaparece el primer dato en la hoja DESTINO AÚN cuando sea un valor que no se repite más adelante... es decir, me estoy quedando con menos datos en la hoja DESTINO de los que tengo en la hoja ORIGEN aún cuando los datos son únicos. Si no logre explicarme con esto, abro una nueva pregunta con ejemplos...

g_r_a_c_i_a_s!!!!

Lo que quieres es que borre los datos de la hoja destino y empiece de nuevo.

Prueba con esta macro

Sub CopiarUnicos()
'Por.Dante Amor
    Set h1 = Sheets("origen")
    Set h2 = Sheets("destino")
    u = h2.Range("D" & Rows.Count).End(xlUp).Row
    If u < 2 Then u = 2
    h2.Range("D2:D" & u).ClearContents
    j = 2
    For i = 5 To h1.Range("A" & Rows.Count).End(xlUp).Row
        Set b = h2.Columns("D").Find(h1.Cells(i, "A"), lookat:=xlWhole)
        If b Is Nothing Then
            h1.Range(h1.Cells(i, "A"), h1.Cells(i, "C")).Copy h2.Cells(j, "D")
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub

sal u dos

Estuve poniendo a prueba la segunda macro y hasta ahora no cometió "los errores" de la primera, no entiendo muy bien que ha cambiado pero te lo agradezco!!!!!!!

Respuesta
1

Prueba este macro:

Sub CopiarSinDuplicados()

Dim FilaHoja2 As Double
Dim CampoAbuscar As String
Dim CampoAComparar As String
Dim Encontrado As Boolean
Dim i As Double
Dim a As Double
Dim l As Double

FilaHoja1 = Hoja1.Range("A65000").End(xlUp).Row
FilaHoja2 = Hoja2.Range("D65000").End(xlUp).Row
Encontrado = False
l = 1
For i = 5 To FilaHoja1
CampoAbuscar = Hoja1.Range("A" & i).Value
For a = 1 To FilaHoja2
CampoComprar = Hoja2.Range("D" & a).Value
If CampoAbuscar = CampoAComparar Then
Encontrado = True
End If
Next
If Encontrado = False Then
Hoja2.Range("D" & FilaHoja2 + l).Value = Hoja1.Range("A" & i).Value
Hoja2.Range("E" & FilaHoja2 + l).Value = Hoja1.Range("B" & i).Value
Hoja2.Range("F" & FilaHoja2 + l).Value = Hoja1.Range("C" & i).Value
l = l + 1
End If
Next

End Sub

Gracias por tu respuesta! Pero la macro copia y pega los datos que ya ha cargado con anterioridad.. no está cumpliendo con el hecho de que no existan (o no copie) valores que ya están en la hoja DESTINO

Debes ver bien si el campo que compara ambas variables son las indicadas es decir, que la Columna A sea la misma que la DE del libro 2 para ser más explicito que el código que buscas en la columna A del libro uno este en la Columna DE del Libro 2 que los datos sean los correctos a comparar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas