Macro búsqueda y extraer ultimo registro

Tenga todos ustedes. Tengo el siguiente problema espero alguien tenga una idea de como puedo solucionarlo.
Tengo 2 libros, en mi libro1 tengo alrededor de 500,000 datos donde tengo columna A y B con datos, en mi libro2 tengo 4500 registros (estos registros son variables) donde solo tengo datos en la columna A, el campo que relaciona a estos dos es el ID... Al momento de realizar un buscarv me extrae el primer dato que encuentra, ignorando si ese ID tiene mas apariciones a lo largo del archivo... Tengo ya esa macro pero como les menciono no me funciona pues no me trae la información que necesito...

Quisiera ver si me pueden apoyar con esta macro de búsqueda... Tengo que buscar el ID del libro2, en todos los ID del libro1, si del ID 4040 encuentra 5 registros, quiero que tome el ultimo ID que encontró y me ponga el valor de la columna B ese valor en el libro2 en la columna B en la fila que corresponde, y asi sucesivamente vaya buscando registro por registro del libro2 en el libro1.

1 Respuesta

Respuesta
5

Pero cuál es el ultimo ID, se debe buscar del libro2 al libro1, ¿pero el orden de búsqueda es tal como están los datos en el libro1? Y de esa forma traerse el último, entonces podría buscar de abajo hacia arriba y el primer dato que se encuentre ese es el último, ¿cierto?

Hola Dam, como siempre eres mi master en esto del mundo de las macros, planteando tu idea me parece fenomenal, tiene mas lógica que mi idea a groso modo. En el ID del libro1 no tiene ningún orden, se tiene que buscar del libro1 al libro2 porque es donde necesito saber el dato de algunos clientes, en cuanto a saldo... entonces lo hago de esa forma, en cuanto a buscar de abajo hacia arriba, creo que esa seria la solución ya que la columnaB esta ordenada de menor a mayor por lo tanto si el cliente tiene un saldo pendiente, que es el dato que me interesa el primero que encuentre sera el que tome.

Espero y quede mas claro, sino házmelo saber y te envío un ejemplo.

Saludos.

Gracias Dam.

Si mándame un ejemplo y en ese mismo archivo te pongo la macro.

Te mande un ejemplo a tu correo.

Saludos

Te regresé la macro

buenas tardes Dam!

Probé la macro que me envías y te comento que hay algunos RFC que no me encuentra, si hago el buscarv manual me salen otros resultados, donde me indica que no encontró información, con le buscarv si me aparece información. Anexo archivos con los datos reales completos.. Te mando correo.

Saludos.

1. No puedo realizar las pruebas, porque tu archivo es muy grande y yo tengo versión 2003 y solamente llega a 65,000 filas,

2. Para revisarlo, puedes partir el archivo histórico en bloques de 50,000 líneas.

3. No enviaste la macro en ninguno de los 2 archivos, puedes poner la macro para revisarla.

4. La macro que te envié es para poner el valor de la columna B y el archivo histórico que me enviaste tiene puro cero en la columna B, entonces dime cuál columna es la que se debe leer.

5. Te recuerdo que la macro se trae el último registro encontrado,

6. Los registros que encontraste con buscarv, yo no los encuentro con buscarv, ¿será qué se perdieron en la parte que no puedo cargar por lo de las 65000 filas?

7. Me puedes señalar un RFC que esté en el libro "FACTURACIÓN ENERO" que si está en el libro "INFO HISTÓRICO" y que la macro no lo encontró.

Me contestas en ese orden.

Saludos. Dam

Buen día Dam!

1- Asi es tengo demasiadas lineas en mi archivo.

2.- Te envío el link con el archivo histórico asi como me lo indicas ahora se generaron 6 archivos. https://www.dropbox.com/s/05i6gqjp8cg6jbs/ARCHIVOS%20COMPLETOS.zip?m

3.- En el archivo "FACTURACIÓN ENERO" anexo macro.

4.- Respecto a esta búsqueda te comento que se busca por RFC, y el dato que se extrae es el que viene en la columna B, si encuentras puros 0 es porque los ordene de menor a mayor para asi poder tomar el ultimo dato encontrado y extraer el saldo que tiene esa persona actualmente.

5.- Estoy totalmente de acuerdo exactamente es lo que necesito ya que con el buscarv lo único que me trae es el primer registro que encuentra ignorando si existen mas por debajo de este dato.

6.-Probablemente no los encuentres ya que el archivo tiene demasiado registros y tu excel muestra muy pocos.

7.- El RFC que esta en "FACTURACIÓN ENERO" y también en INFO HISTÓRICO que no encuentra con la macro pero con buscarv si, seria este, claro existen mas casos pero ese es el primero.

R.F.C. Saldo nuevo con macro Saldo nuevo con buscarv

SOCJ690326UB6 no encuentra nada 28499.94

Saludos y muchas gracias por la respuesta.

Le hice ajustes a la macro, te la regreso:

En el archivo que me enviaste de "FACTURACION FEBRERO", la columna de RFC es la T, si ese es el caso, entonces cambia en la macro estas líneas

For i = 2 To l1.Range("A" & Rows.Count).End(xlUp).Row
Application.StatusBar = "Procesando registro " & i & " de " & l1.Range("A" & Rows.Count).End(xlUp).Row
t = l1.Cells(i, "A")
Set r = l2.Range("A:A")

por estas

For i = 2 To l1.Range("T" & Rows.Count).End(xlUp).Row
Application.StatusBar = "Procesando registro " & i & " de " & l1.Range("T" & Rows.Count).End(xlUp).Row
t = l1.Cells(i, "T")
Set r = l2.Range("T:T")

DICES QUE EL DATO a buscar es en la colmna B y se va a poner en la columna B, pero en lel archivo de FEBRERO que me enviate en la columna B dice: "Sucursal", si la columna destino es otra, cambia en la macro esta línea

l1.Cells(i, "B") = l2.Cells(fila, "B")

por ejemplo por esta

l1.Cells(i, "M") = l2.Cells(fila, "B")

Sub datos_a_buscar()
'por.dam
Application.ScreenUpdating = False
Set l1 = Workbooks("LIBRO2_DATOSABUSCAR dam.xlsm").Sheets("Hoja1")
Set l2 = Workbooks("LIBRO1_MASDATOS.xlsx").Sheets("Hoja1")
l1.Activate
For i = 2 To l1.Range("A" & Rows.Count).End(xlUp).Row
Application.StatusBar = "Procesando registro " & i & " de " & l1.Range("A" & Rows.Count).End(xlUp).Row
    t = l1.Cells(i, "A")
    Set r = l2.Range("A:A")
    Set c = r.Find(t)
    fila = 0
    If Not c Is Nothing Then
        'l2.Activate
        fila = c.Row
        ncell = c.Address
        'Range(ncell).Select
        Do
            Set c = r.FindNext(c)
            'Range(c.Address).Select
            If Not c Is Nothing And c.Address <> ncell Then
                fila = c.Row
            End If
        Loop While Not c Is Nothing And c.Address <> ncell
    End If
    'l1.Activate
    If fila > 1 Then
        l1.Cells(i, "B") = l2.Cells(fila, "B")
    End If
    fila = 0
Next
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "Proceso Terminado", vbInformation, "DATOS A BUSCAR"
End Sub

Prueba y me comentas.

Saludos. Dam

Si pudiera darte mas puntos por esta gran macro, créeme que sin dudarlo te lo daría excelentísima respuesta, justo lo que necesitaba.

Muchas gracias Dam.

Como siempre el master de master en el mundo de las macros, claro sin dejar a un lado a todas aquellas personas que colaboran en este excelente foro.

Sludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas