Buscar un valor en la columna A y copiar y pegar en otra hoja.

Tengo un libro en el cual tengo una hoja llamada "Explosión de Avíos" y otra hoja a la cual tengo que enviar los datos correspondientes al numero buscado y encontrado. Es decir;

En la Columna "A" tengo un numero que identifica a los datos contiguos de las columnas (B, C, D, E, F, G, H, I, J). Ejemplo:

COLUMNAS:

A B C D E F G H I J

No DESCRIPCIÓN 2 3 4 5 6 7 TOTAL

1 SUELA 1830 1 1 1 1 1 1 6 PRS

1 SUELA 1830 2 3 5 1 2 8 21 PRS

2 SUELA 1831 1 4 9 3 4 7 28 PRS

1 SUELA 1830 8 4 6 2 3 7 30 PRS

Lo que pretendo hacer es que al introducir el numero a buscar en la celda "E25" en la hoja destino (por llamarla con algún nombre), me extraiga los datos correspondientes de las celdas (B:J) de la hoja "Explosión de Avíos" y los copie el la hoja "Destino" a partir de la celda "B21".

Gracias y espero haber sido muy claro, para que me puedan dar la mano.

1 Respuesta

Respuesta
3

Entiendo que la coincidencia es la celda A1, por lo que pregunto es correcto que se repita en la hoja "explosión de avíos" este criterio, es edcir, ¿debería traer todas las filas en donde se repita en criterio y los vaya copiando hacia abajo?

Gracias Maestro por atender mi tema.

Copiar las coincidencias hacia abajo a partir de la celda "B21" en la hoja "destino" a la cual nombrare después de la extracción. Si eligiera que me extraiga la coincidencia 1 me tendría que quedar asi:

B C D E F G H I J
DESCRIPCIÓN 2 3 4 5 6 7 TOTAL
SUELA 1830 1 1 1 1 1 1 6 PRS
SUELA 1830 2 3 5 1 2 8 21 PRS
SUELA 1830 8 4 6 2 3 7 30 PRS

Las celdas "I,J" están combinadas solo en el encabezado.

Gracias y espero tu código que gentilmente me envíes.

Ok, estos códigos hacen lo que necesi

Sub copia_pega():
dato = Sheets("destino").Range("E25").Value
primer_dato = 21
Sheets("Explosión de Avíos").Select
Dim Comprobar, Contador
Comprobar = True: Contador = 0 ' Inicializa variables.
Do ' Bucle externo.
Do While Contador < 65000 ' Bucle interno.
Contador = Contador + 1 ' Incrementa el contador.
If Range("A" & Contador).Value <> "" Then ' Si la condición es verdadera.
If Range("A" & Contador).Value = dato Then
Range("B" & Contador & ":J" & Contador).Select
Selection.Copy
Sheets("destino").Select
Range("B" & primer_dato).Select
ActiveSheet.Paste
Application.CutCopyMode = False
primer_dato = primer_dato + 1
Sheets("Explosión de Avíos").Select
Sheets("destino").Select
End Sub

tas no olvides finalizar la pregunta.

Buenos días Maestro.

Primero que nada infinidad de gracias por tu ayuda y por el código que me hiciste el favor de enviar.

Te comento tu código funciona a la perfección, solo que posiblemente no me haya explicado muy bien en cuanto a algunos detalles muy pequeños, te los explico:

1.- Cuando me inserta por primera vez los datos a mi hoja destino lo hace a partir de la celda "B21" lo cual esta excelente, si vuelvo a ejecutar la macro me borra los datos anteriores y los datos nuevos los coloca a partir de la celda "B21" lo cual no debería ser asi, me gustaría que me los colocara debajo de los viejos dejando pasar una fila vacía.

2.- El encabezado no me lo copia, lo cual me gustaría que me lo copiara.

B C D E F G H I J

DESCRIPCIÓN 2 3 4 5 6 7 TOTAL

3.- La hoja "destino" no necesariamente tendría que llamarse asi, por ejemplo; en mi primer orden de compra se llama "destino" (el código funciona para la hoja llamada "destino" pero ya no funcionaria para otras hojas). Lo que quisiera es que el código funcionara para cualquier hoja.

Muchas gracias por atender mi consulta y no dudando de verme favorecido con tu ayuda, quedo en espera de tu respuesta, la cual se que la brindan sin ningún interés.

Pregunto, debajo de la información que estas pegando hay más información, lo digo porque el código lee la celda E25, es decir si sigo llenando datos debajo lo que va a pasar es que borre la celda donde condicionas la copia.

Sobre el nombre de la hoja, siempre debe tener un nombre, sin embargo, puedo hacer que siempre te pregunte como se llama la hoja"destino", la idea es que siempre digites lo menos posible, pero si en este caso necesitas que el nombre de la hoja sea distinto, lo puedo dejar abierto para que la amcro te rpegunte como se llama la hoja "destino" y listo.

Confirma si es lo que necesitas para elaborar los códigos.

Buenas maestro y gracias por seguir ayudando.

1.- La celda "E25" la he cambiado por "C9" asi que no habrá problema con eso.

2.- Sobre el nombre de la hoja se me ocurre algo como: "Acivesheet" o algo asi. En caso de que no se pudiera realizar esto, que no pregunte nada la macro, lo dejaría como hoja "destino". Y yo me adapto con lo que se pueda hacer.

Gracias Maestro y quedo en espera de su ayuda.

Estos son los códigos corregidos:

dato = Sheets("destino").Range("C9").Value
If Range("B21").Value = "" Then
primer_dato = 21
Else
primer_dato = Range("A" & Cells.Rows.Count).End(xlUp).Row + 2
Sheets("Explosión de Avíos").Select
Dim Comprobar, Contador
Comprobar = True: Contador = 0 ' Inicializa variables.Do 'Bucle externo.
Do While Contador < 65000 ' Bucle interno.
Contador = Contador + 1 ' Incrementa el contador.
If Range("A" & Contador).Value <> "" Then ' Si la condición es verdadera.
If Range("A" & Contador).Value = dato Then
Range("B" & Contador & ":J" & Contador).Select
Selection.Copy
Sheets("destino").Select
Range("B" & primer_dato).Select
ActiveSheet.Paste
Application.CutCopyMode = False
primer_dato = primer_dato + 1
Sheets("Explosión de Avíos").Select
Sheets("destino").Select
End Sub

Gracias Maestro por tu código, pero creo que aun no me he dado a entender muy bien, lo cual me apena mucho. Explico:

Vamos por pasos:

1.- Ejecuto la macro teniendo en cuenta que la hoja "Destino" esta vacía a partir de la celda "B21" (Lo de dejar vacía la hoja "destino" a partir de la celda "B21" lo haré manualmente, la primera vez de la ejecución de la macro).

2.- Ya tengo datos en la hoja "destino". Puedo ocupar varias filas en la hoja "destino" esto dependiendo de los datos que tenga en la hoja "Explosión de Avíos" los cuales pueden ser desde una fila a copiar, dos filas a copiar o mas filas a copiar.

Es por eso que la linea de código que me agregaste no me funciona com o quisiera:

primer_dato = Range("A" & Cells.Rows.Count).End(xlUp).Row + 2

funciona si tengo dos o tres lineas copiadas en la hoja "destino" pero si tengo cinco lineas en la hoja "destino" ya no funciona por que si ejecuto la macro por segunda vez me sobre escribe encima de los datos que ya tengo con la ejecución por primera vez de la macro.

3.- Ejecuto la macro por segunda o tercera vez y lo que quisiera es que comience a contar a partir de la celda "b21" hacia a bajo encontrando la primer celda vacía dejando pasar una linea.

Gracias maestro y créeme que me apena mucho no darme a entender, ya que te estoy haciendo trabajar de mas.

No dudando de verme favorecido con tu ayuda quedo en espera de su respuesta.

La macro si hace lo que pides, solo que en mi código había un error, si te fijas había condicionado la columna A, y debió ser la B, en todo caso esto debería resolverlo

Sub copia_pega()
dato = Sheets("destino").Range("C9").Value
If Range("B21").Value = "" Then
primer_dato = 21
Else
primer_dato = Range("B" & Cells.Rows.Count).End(xlUp).Row + 2
End If
Sheets("Explosión de Avíos").Select
Dim Comprobar, Contador
Comprobar = True: Contador = 0 ' Inicializa variables.
Do 'Bucle externo.
Do While Contador < 65000 ' Bucle interno.
Contador = Contador + 1 ' Incrementa el contador.
If Range("A" & Contador).Value <> "" Then ' Si la condición es verdadera.
If Range("A" & Contador).Value = dato Then
Range("B" & Contador & ":J" & Contador).Select
Selection.Copy
Sheets("destino").Select
Range("B" & primer_dato).Select
ActiveSheet.Paste
Application.CutCopyMode = False
primer_dato = primer_dato + 1
Sheets("Explosión de Avíos").Select
Sheets("destino").Select
End Sub

Gracias maestro el error lo había detectado y ademas te faltaba abrir el "Do" en el código anterior.

Tu código me fue de mucha ayuda. Doy por solucionado el tema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas