Buenas, ¿Cómo podría comparar un valor en una columna con otra de otra hoja i si es el mismo copiar esa fila en una nueva?

Necesito poder comparar dos columnas entre hojas y si son iguales copiar toda la fila del valor que coincide de la segunda hoja en una nueva.

1 respuesta

Respuesta
1

Para desarrollarte la macro necesito algunas aclaraciones:

- ¿Alguna de las columnas será siempre mayor que la otra? En ese caso en qué hoja se encuentra.

- ¿Cuáles son las columnas que se comparan en cada hoja?

- Al copiar toda la fila en una nueva hoja...¿se irán agregando los registros encontrados? ¿O hay que crear nueva hoja por cada coincidencia?

- Nombre de la nueva hoja si ya está creada.

Espero tus aclaraciones para continuar con el tema.

La columna que se compara contiene números i alguna letra como un DNI i se encuentra en la hoja STOCK GIRONA en la columna B donde allí están las mismas columnas que en la otra hoja a comprarar que es LISTADO NEUMÁTICOS, lo que pretendo es buscar si ese "DNI" de la hoja STOCK GIRONA se encuentra en la hoja LISTADO NEUMÁTICOS i si es afirmativo copiar toda la fila que coincide en LISTADO NEUMÁTICOS en una hoja nueva llamada STOCK GIRONA NEW i todas las coincidencias que se añadan en esa nueva hoja (que se vayan agregando los registros en ella). Gracias :)

Bien, entonces entra al Editor de macros (con atajo ALT + F11)

Inserta un módulo y allí copia la siguiente rutina:

Sub comparando()
'x Elsamatilde
'hojas involucradas, se asume que ya existen
Set hol = Sheets("LISTADO NEUMÁTICOS")
Set hos = Sheets("STOCK GIRONA NEW")
'se recorre la col B de hoja STOCK hasta el final de datos
Sheets("STOCK GIRONA").Select
'la primer fila con datos se asume en 2
[B2].Select
'se recorre col B hasta encontrar celda vacía, fin de rango
While ActiveCell <> ""
    'se busca ese codigo en hoja Listado, col B
    Set busco = hol.Range("B:B").Find(ActiveCell.Value, LookIn:=xlValues, lookat:=xlWhole)
    'si lo encuentra copia la fila a la hoja NEW, agregando a continuación
    If Not busco Is Nothing Then
        busco.EntireRow.Copy Destination:=hos.Range("A" & hos.Range("B" & Rows.Count).End(xlUp).Row + 1)
    End If
    'se pasa a la siguiente fila de hoja activa (Stock)
    ActiveCell.Offset(1, 0).Select
Wend
'opcional:
MsgBox "Fin del proceso de pase.", , "Información"
End Sub

Lee los comentarios de la macro por si  necesitas ajustar algún detalle, como puede ser la fila de inicio que asumí en 2.

Volviendo a la hoja, para ejecutar este código podrás entrar al menú Desarrollador (o Programador), macros, colocar un botón para ejecutarla o asignarle un atajo de teclado... estos conceptos los dejé explicados en la sección Macros de mi sitio:

Si el tema queda resuelto no olvides valorar la respuesta (Excelente o buena). Si necesitas el libro con el ejemplo, en mi sitio aparecen los correos.

Sdos.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas