Como hacer un For que me recorra una columna de un libro con una columna de otro libro
Tengo dos libros en uno necesito que me recorra las filas desde la celda B4 hasta el ultimo nombre y que me los vaya comparando con las filas desde la celda B2 del otro libro, si encuentra un nombre que coincide con el otro pues que tome el valor que esta en la columna C (osea al lado) con la del otro libro y si es mayor que le copie un codigo que esta en la fila A
Para explicarme mejor
1 respuesta
[H o l a María:
Buena la explicación y el ejemplo, solamente te faltó mencionar en dónde se va a pegar el código.
En tu ejemplo, se copia el código 1234, pero en dónde quieres que lo ponga.
Y otro detalle, en tu explicación mencionas que el valor está en la columna "C", pero en la imagen pusiste el valor en la columna "D", puedes aclarar en cuál columna está el valor.
[H o l a Mary:
Otros detalles, cómo se llama la hoja de cada libro.
Y en tu ejemplo, tienes 2 veces el nombre de María García, y ambos valores son mayores, ¿qué hago con los códigos?
- ¿Quieres los 2 y en dónde los pongo?
- O solamente un código, ¿cuál de los 2 códigos quieres el primero o el que tenga el valor más grande?
Ese código se copia en otro libro en donde la celda activa es donde lo tendrá que copiar ,
Y si es el la columna C que pena.
Otra vez, con más calma:
- ¿Columna de valores?
- ¿Columna dónde quieres el resultado?
- Cuál resultado quieres, el primero que encuentre, en tu ejemplo sería "1234"
- O quieres el valor más grande de todos, en tu ejemplo sería "2345"
Te anexo la macro, lo que hace es tomar los datos de la primera hoja en ambos libros.
Debes tener abiertos los dos libros.
Pon la siguiente macro en el libro del libro uno, es decir, donde vamos a poner los resultados.
Cambia en la macro los siguientes datos por tus datos:
Set h1 = l1.Sheets(1) Set l2 = Workbooks("otro libro.xlsx") 'Nombre del otro libro Set h2 = l2.Sheets(1) colr = "C" 'columna Resultado colv = "D" 'columna de Valores
Pon la macro en un módulo:
Sub Copiar_Codigo() ' Por Dante Amor ' Set l1 = ThisWorkbook Set h1 = l1.Sheets(1) Set l2 = Workbooks("otro libro.xlsx") 'Nombre del otro libro Set h2 = l2.Sheets(1) colr = "C" 'columna Resultado colv = "D" 'columna de Valores ' 'recorra las filas desde la celda B4 hasta el ultimo nombre For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row cod = "" wmax = h1.Cells(i, colv).Value 'los vaya comparando con las filas desde la celda B2 del otro libro Set r = h2.Columns("B") Set b = r.Find(h1.Cells(i, "B").Value, LookAt:=xlWhole, LookIn:=xlValues) If Not b Is Nothing Then celda = b.Address Do ' y si es mayor que le copie un codigo que esta en la fila A If h2.Cells(b.Row, colv).Value > wmax Then cod = h2.Cells(b.Row, "A").Value wmax = h2.Cells(b.Row, colv).Value End If Set b = r.FindNext(b) Loop While Not b Is Nothing And b.Address <> celda h1.Cells(i, colr).Value = cod Else h1.Cells(i, colr).Value = "No existe el nombre" End If Next MsgBox "Fin" End Sub
'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. '.[Avísame cualquier duda
Hola Dante,
Dante pero no me está haciendo lo que se debe hacer, en el libro 1 primero debe comparar cada uno de los nombres que están en la columna B con los nombres del otro libro 2 que también se encuentran en la columna B una vez se hago esto y un nombre coincide en el libro 1 como en el libro 2, que del libro 1 tome el valor que está en la columna Q y que con los valores de la columna C del libro 2 haga la operación de que si El valor que está en el libro 1 es menor que alguno de los que tengo en él otro libro qué hay si me coja el código de la columna A y lo copie en el libro 1 en la celda R.
Claro está que deben coicidir los nombres ósea si me busca maria en el libro 1 y lo encuentra en el libro 2 qué hay si me haga el resto.
Para ajustar la macro debes responde mis dudas:
Otra vez, con más calma:
Otros detalles, cómo se llama la hoja de cada libro.
Y en tu ejemplo, tienes 2 veces el nombre de María García, y ambos valores son mayores, ¿qué hago con los códigos?
- ¿Quieres los 2 y en dónde los pongo?
- O solamente un código, ¿cuál de los 2 códigos quieres el primero o el que tenga el valor más grande?
- ¿Columna de valores?
- ¿Columna dónde quieres el resultado?
- Cuál resultado quieres, el primero que encuentre, en tu ejemplo sería "1234"
- O quieres el valor más grande de todos, en tu ejemplo sería "2345"
Podrías ilustrar con imágenes explicando claramente los ejemplos que pongas en las imágenes.
Procura poner imágenes con ejemplos reales y que en las imágenes se vean los nombres de los libros, los nombres de las hojas, las filas y las columnas de excel.
Es importante que aunada a la imagen redactes la explicación del ejemplo.
Tengo el libro1(11. Octubre CR_PRUEBA) donde desde la columna B4 empiezan a ver nombres y tengo el libro 1 (Facturación Octubre 2018 CR_PRUEBA) que desde la columba B2 empiezan tambien a ver nombres, entonces los pasos serian:
1. Respecto a lo anterior comparar estas dos listas si el nombre del libro 1 coincide con el nombre del libro 2 pues que vaya al libro 1 coja el valor que se encuentra en Q de ese nombre.
2. una vez identificado el valor del libro 1 que coja y lo reste con cada uno de los números que salen en la columna C del libro 2 pero solo si los nombre que coinciden en la imagen que coloque el ejemplo de LEMEN pero son muchas mas
3 Entonces hay va la condición de que si el valor que esta en el libro 2 es mayor a la del libro 1 puede ser el primero que encuentre no hay problema porque los números están ordenados de menor a mayor en todo caso es que sea mayor que el del libro 1 y que no este resaltado de rojo como aparece en la imagen si esta resaltado es porque este código ya lo he utilizado y no lo puedo volver a utilizar entonces que pase al siguiente valor cuando esto se cumpla que hay si copie el código(SOLO UN CÓDIGO) de la columna A y que me lo copie en el libro 1 en la R según el nombre que coincide anteriormente.
En el libro 2 la Hoja se llama Sheet3, y el el primero libro la hoja se llama Sheet2
Sigo sin entender, esta es tu petición original
Tengo dos libros en uno necesito que me recorra las filas desde la celda B4 hasta el ultimo nombre y que me los vaya comparando con las filas desde la celda B2 del otro libro, si encuentra un nombre que coincide con el otro pues que tome el valor que esta en la columna C (osea al lado) con la del otro libro y si es mayor que le copie un codigo que esta en la fila A
En ninguna parte mencionas lo de una resta.
El ejemplo que te pedí es para que lo expliques, utilizando los datos del ejemplo. Pero en tu explicación no utilizas los datos del ejemplo.
Respecto a lo anterior comparar estas dos listas si el nombre del libro 1 coincide con el nombre del libro 2 pues que vaya al libro 1 coja el valor que se encuentra en Q de ese nombre
Es importante que aunada a la imagen redactes la explicación del ejemplo.
Tu explicación debe ser algo como esto:
Libro1: "11. Octubre CR_PRUEBA"
Hoja del libro1: "Sheet2"
Celda "B29" de la hoja Sheet2, leer el dato "LEMEN"
Celda "Q29" de la hoja Sheet2, leer el dato "5 560 039,09"
Buscar el dato "LEMEN" en el libro2: "Facturación Octubre 2018 CR_PRUEBA", en la hoja "sheet3", en la columna "B"
En el ejemplo el dato es encontrado en la celda B4.
¿En la C4 está el valor 0. qué hago?
¿Si "5 560 039,09" > 0 qué hago?
¿Busco el siguiente?
El siguiente es 141936
¿Según tu ejemplo en dónde me debo detener?
Cuando llegue a "10 839 646" porque "10 839 646" es mayor que "5 560 039,09" ; y entonces debo tomar el dato de la columna "A" que es111709101 y lo pongo en la celda R29. (También debes poner una imagen con el resultado que esperas.
Nuevamente tu explicación debe incluir los datos de tu imagen.
Buen Día,
Hola Dante es exactamente como tu me respondiste eso es lo que necesito,no lo hago con las celdas especificas por que no debe quedar solo para la del ejemplo .
Libro1: "11. Octubre CR_PRUEBA"
Hoja del libro1: "Sheet2"
Celda "B29" de la hoja Sheet2, leer el dato "LEMEN"
Celda "Q29" de la hoja Sheet2, leer el dato "5 560 039,09"
Buscar el dato "LEMEN" en el libro2: "Facturación Octubre 2018 CR_PRUEBA", en la hoja "sheet3", en la columna "B"
En el ejemplo el dato es encontrado en la celda B4.
En la C4 está el valor 0 leer este dato y decir si del libro Libro1: "11. Octubre CR_PRUEBA" la Celda "Q29" donde esta este valor 5 560 039,09" es mayor que el de la C4 del libro2 "Facturación Octubre 2018 CR_PRUEBA"
Si "5 560 039,09" > 0 qué hago
Busco el siguiente
El siguiente es 141936
¿Según tu ejemplo en dónde me debo detener?
Te debes detener cuando llegue a "10 839 646" porque "10 839 646" es mayor que
"5 560 039,09" ; y entonces verifico si el dato de la columna "A" que es 111709101 esta en rojo debe buscar el siguiente y volver a verificar que la columna "A "el código que este no se encuentre en rojo la letra entonces cuando este en negro la letra tomo el dato de la columna "A" que es 111709101 lo coloreo de rojo y lo pongo en la celda R29.
En este caso hay mas códigos después del que se encuentra en rojo entonces cuando esto pase pasa al siguiente verifica las dos condiciones y toma el dato de la columna "A" que es 11170911043 lo coloreo de rojo y lo pongo en la celda R29,
Cuando no hay mas códigos después un que este en rojo no debe copiar nada y decir que no se encontró el valor adecuado
Este seria el resultado de la macro.
Gracias por su ayuda!!
Va la macro
Sub Copiar_Codigo() ' Por Dante Amor ' ' Busca un valor mayor al de la hoja1 y se trae el código ' Set l1 = ThisWorkbook Set h1 = l1.Sheets("Sheet2") Set l2 = Workbooks("Facturación Octubre 2018 CR_PRUEBA.xlsx") 'Nombre del otro libro Set h2 = l2.Sheets("Sheet3") colr = "R" 'columna Resultado colc = "Q" 'columna valor a comparar hoja1 colv = "C" 'columna de Valores hoja2 ' 'recorra las filas desde la celda B4 hasta el ultimo nombre For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row cod = "" nombre = h1.Cells(i, "B").Value wmax = h1.Cells(i, colc).Value If h1.Cells(i, colr).Value = "" Then 'los vaya comparando con las filas desde la celda B2 del otro libro Set r = h2.Columns("B") Set b = r.Find(nombre, LookAt:=xlWhole, LookIn:=xlValues) If Not b Is Nothing Then celda = b.Address Do ' y si es mayor que le copie un codigo que esta en la fila A If h2.Cells(b.Row, colv).Value > wmax Then If h2.Cells(b.Row, "A").Font.ColorIndex <> 3 Then cod = h2.Cells(b.Row, "A").Value h2.Cells(b.Row, "A").Font.ColorIndex = 3 Exit Do End If End If Set b = r.FindNext(b) Loop While Not b Is Nothing And b.Address <> celda If cod = "" Then h1.Cells(i, colr).Value = "No se encontró el valor adecuado " Else h1.Cells(i, colr).Value = cod End If Else h1.Cells(i, colr).Value = "No se encontró el valor adecuado " End If End If Next MsgBox "Fin" End Sub
'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. '.[Avísame cualquier duda
- Compartir respuesta