Compara datos de un libro con otro

Experto tengo el siguiente ejercicio que realizar, tengo ideas como hacerlo pero traducirlo al lenguaje de macros es un poco difícil para mi ya que soy un novato, voy al grano lo que quiero hacer es lo siguiente : tener un libro de excel o una base de datos no se cual corresponde mejor, en donde yo tnga ponte tu en una columna varias personas (cerca de 300 aquí aparecen todas la persona trabajando) y en la columna de al lado una nota para cada persona (la nota es para clasificar a las personas con notas del 1 al 7 ), entonces a mi me envían un archivo excel con una reporte más menos así
personas especialidad correo
Mónica asistente [email protected]
...
Y así para abajo, entonces en el informe que me envían yo quiero agregar el campo o titulo calificación entonces allí necesito una macro que me vaya comparando la primera columna del libro base de datos con la columna de las persona y si hay coincidencia me copie la nota de esa persona en el archivo que me envían hasta que aparezca una nueva columna con la calificación de todas las persona que aparezcan en el archivo que me envían (aparecerán solo algunas personas de la base de datos no todas ) entonces debería quedar algo así
personas especialidad correo Calificación
Mónica asistente [email protected]  6
...
No se si se entiende, si no se entiende este es mi correo para aclararte más las cosas ([email protected]) y si te quedo claro esperaré ansioso tu respuesta amigo.

1 respuesta

Respuesta
1
Escríbeme el código que llevas, y lo vamos adecuando
Solo tengo una idea de como hacerlo y como soy novato en programación en excel no se como traducirlo al lenguaje, pero te explicare como estaba pensando hacerlo y tu ahí me corriges o me ayudas, mira::
Primero recorrer todas las filas de mi libro 1 (donde quiero guardar el datos de la base de datos o libro 2) mediante un for fila=2 to filalibre -1 y otro for para que me recorra todas las filas del libro 2 for fila2= 2 to filalibre2-1 (las columnas seran siempre las mismas asi que no necesito recorrerlas), luego
hacer una comparacion
if libro 1.cells(fila,3)=libro 2.cells(fila2,1) then
a =fila 2 ' que me guarde la fila donde hubo una coincidencia
libro 1.cells(fila,6)=libro 2.cells(a,2)
end if
next filla2
next fila 1
Esa es más menos mi idea se que tengo que determinar libro 1 y libro 2, no se si me puedas ayudar pero me seria de gran ayuda ya que estoy contra el tiempo no se si es más fácil hacer la base de datos en access y allí consultar, bueno uds es el experto amigo espero su respuesta y gracias por responder y ayudar gracias
Ok, a ver...
Se va a comparar la celda A1 del libro 1 con la celda A1 del libro 2, ¿la celda A2 del libro 1 con la celda A2 del libro 2? O se va a tomar como valor la celda A1 del libro 1, ¿y se va a buscar en todas las filas del libro 2?
Los datos que serán comparados están en la columna 3, es decir C, del libro 1, y en la columna 1 es decir A, ¿del libro 2?
Si la comparación es A1 con A1, A2, con A2, si existe una coincidencia, por ejemplo en A2, ¿se debe escribir algo en alguna celda? ¿En la misma fila? Como se va a indicar la coincidencia, es decir, ¿escribiendo POR o Coincidencia o Si?
¿Qué office usas: 2003, 2007?
Te empecé a escribir unos ejemplos, pero me tuve que ocupar en algo.
Espero tus detalles, y en un rato, te escribo lo que tengo...
Si mira se va a comparar la celda A2 (primeramente) del libro 1 con todas las filas de la columna 1 del libro 2, luego la celda A3 del libro 1 con todas las filas de la columna 1 del libro 2 y así sucesivamente, por eso debo saber cuantas filas tiene el libro 1 y cuantas filas tiene el libro 2, yo lo hago con el siguiente código
Range("A2").Select
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
filalibre = ActiveCell.Row
Con esto guardo la ultima fila vacías entonces habrán (filaslibre -1) filas con información en el libro, esto debo aplicarlo tanto para el libro 1 como para el libro 2, ademas comparar la celda A2 del libro 1 con todas las filas de la columna 1 del libro 2 y cuando A2 sea igual a alguna celda del libro 2 me guarde la información de la columna de al lado, o sea si la fila donde se encuentra la coincidencia en libro 2 es la fila por tendré que guardar la información de la celda (x, 2), porque en la columna 2 esta la calificación y esa celda quiero guardarla en la columna 6 del libro 1, a todo esto tengo que ejecutar la macro desde el libro 1 no se si queda claro, en resumen
A2 columna 3 libro 1 comparo con columna 1 - A2, A3, A4, A5 ... hasta la ultima fila con información del libro 2, cuando la información de A2 sea igual a la fila Ax del libro 2 columna uno me guarde la fila a= fila coincidencia, ahora la información que deseo transportar al excel esta en la columna 2 del libro 2, entonces guardar la celda (fila, columna)=(a, 2) esta celda o información la traslado a la columna 6 del libro 1 algo así
           Libro 1
           Columna 6
A2 (a, 2)
Espero haber sido claro espero tu respuesta
Hola que tal experto bueno te escribía porque estuve realizando hartas pruebas para realizar la macro, lo que hice fue en vez de comparar 2 libros comparar 2 hojas, pero la idea siempre es que compara los dos libros libro 1 y libro 2 como menciones anteriormente, bueno hice algo parecido a lo que te dije en el mensaje anterior pero para 2 hojas en un mismo libro y me resultó, eso si demora parece que el bucle es demasiado largo bueno te pongo mi código que realize para las hojas haber si me la puedes adaptar para libros diferentes y no hojas diferentes como lo hice yo
Sub comparar()
Dim filalibre, dato, filalibre2, fila2, fila As Integer
Dim datoguar As String
Range("A2").Select
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
filalibre = ActiveCell.Row
For fila = 2 To filalibre - 1
Sheets("Hoja5").Select
Range("A2").Select
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
filalibre2 = ActiveCell.Row
For fila2 = 2 To filalibre2 - 1
If Sheets("Hoja4").Cells(fila, 3) = Sheets("Hoja5").Cells(fila2, 1) Then
dato = fila2
datoguar = Sheets("Hoja5").Cells(dato, 2)
Sheets("Hoja4").Cells(fila, 6) = datoguar
End If
Next fila2
Next fila
End Sub
Bueno ese es mi código espero me puedas ayudar y gracias desde ya por todo
Ok, antes que nada, tendríamos que checar si el libro ya se encuentra abierto o no, para no estar abierto varias veces el mismo.
Te dejo la referencia, para checar lo que te comente antes
http://support.microsoft.com/kb/291295/es
Ahora, dentro de la página de referencia que te di, en la sección IsFileOpen("c:\Book2.xls"), tendrías que cambiarle por la ruta y el archivo, de tu libro 2.
Despues, vamos a quitar lo que esta entre el if y el else, y el else y el end if, quedando lo siguiente:
If IsFileOpen("C:\Documents and Settings\DeathWatch\Mis documentos\Excel\Libro2.xls") Then
          Compara        ' Se llama al Sub que indicare despues
Else
          Workbooks.Open ("C:\Documents and Settings\DeathWatch\Mis documentos\Excel\Libro2.xls")
          Compara        ' Se llama al Sub que indicare despues
    End If
-------
Lo siguiente es el sub que tiene todos los procedimientos:
Private Sub Compara()
Workbooks("Libro1").Activate
Sheets("Hoja5").Select
Range("A2").Select
While ActiveCell.Value <> ""
Valor_Celda1 = ActiveCell.Value
    Workbooks("Libro2").Activate
    Sheets("Hoja4").Select
    Range("A2").Select
    While ActiveCell.Value <> ""
    Valor_Celda2 = ActiveCell.Value
    If Valor_Celda1 = Valor_Celda2 Then
        Fila_Actual = ActiveCell.Row
        datoguar = Cells(Fila_Actual, 2)
        Workbooks("Libro1").Sheets("Hoja5").Cells(Fila_Actual, 6).Value = datoguar
    End If
    ActiveCell.Offset(1, 0).Select
    Wend
Workbooks("Libro1").Activate
Sheets("Hoja5").Select
ActiveCell.Offset(1, 0).Select
Wend
End Sub
--------------------
Pruébalo y me dices que onda...
Lo probé pero no me funcionó, me da error en la parte :
If IsFileOpen("C:\Documents and Settings\DeathWatch\Mis documentos\Base de datos calificacion.xls") Then
          Compara        ' Se llama al Sub que indicare despues
Else
Workbooks.Open ("C:\Documents and Settings\DeathWatch\Mis documentos\Base de datos calificacion.xls")
          Compara        ' Se llama al Sub que indicare despues
    End If
Y tengo dudas porque cuando coloco
Workbooks("Base de datos calificación").Activate
' Base de datos calificación es el nombre del libro que tengo donde tengo las calificaciones para todos los codigosy me dice subíndice fuera del intervalo, probé también condarle la dirección completa
Workbooks("C:\Documents and Settings\Administrador\Mis documentos\Base de datos calificacion.xls").Activate
pero tampoco sale el mismo error subindice fuera del intervalo, para el caso de libro1 le puse en vez de libro 1 el nombre del libro donde voy a trabajar el libro ejemplo
Workbooks("Ejemplo").Activate
Esas son mis dudas espero tus respuesta y gracias por la ayuda
Ok, vamos por partes entonces:
Te escribo todo el código, como tendría que quedar según tu archivo...
---------------
Sub TestFileOpened()
    If IsFileOpen("C:\Documents and Settings\Administrador\Mis documentos\Base de datos calificacion.xls") Then
Compara
    Else
Workbooks.Open ("C:\Documents and Settings\Administrador\Mis documentos\Base de datos calificacion.xls")
Compara
    End If
End Sub
Function IsFileOpen(filename As String)
    Dim filenum As Integer, errnum As Integer
    On Error Resume Next
    filenum = FreeFile()
    Open filename For Input Lock Read As #filenum
    Close filenum
    errnum = Err
    On Error GoTo 0
    Select Case errnum
        Case 0
         IsFileOpen = False
        Case 70
            IsFileOpen = True
        Case Else
            Error errnum
    End Select
End Function
Private Sub Compara()
Workbooks("Libro1").Activate
Sheets("Hoja5").Select
Range("A2").Select
While ActiveCell.Value <> ""
Valor_Celda1 = ActiveCell.Value
    Workbooks("Base de datos calificacion").Activate
    Sheets("Hoja4").Select
    Range("A2").Select
    While ActiveCell.Value <> ""
    Valor_Celda2 = ActiveCell.Value
    If Valor_Celda1 = Valor_Celda2 Then
        Fila_Actual = ActiveCell.Row
        datoguar = Cells(Fila_Actual, 2)
        Workbooks("Libro1").Sheets("Hoja5").Cells(Fila_Actual, 6).Value = datoguar
    End If
    ActiveCell.Offset(1, 0).Select
    Wend
Workbooks("Libro1").Activate
Sheets("Hoja5").Select
ActiveCell.Offset(1, 0).Select
Wend
End Sub
--------------
¿Es así como lo probaste?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas