Macro para buscar una fila específica y copiar la fila en otra hoja

Tengo una hoja con muchos datos, la primera columna es de numeración y va del 1 al 10000. Luego tiene columnas de nombres y direcciones. Lo que necesito es una celda en la cual escriba yo un número X de la primera columna y que luego al ejecutar el macro, este encuentre la fila de ese numero y la copie en otra hoja. ¿Es posible?

1 respuesta

Respuesta

Esta es una de las muchísimas maneras de hacerlo:

1. Al lado de la celda donde pondrás el número a buscar pon: =COINCIDIR(celdaconelvalorbuscado;LaHojaconlosdatos!$A:$A;0)-1

Esta función buscara el número que necesitas en la hoja con los datos y arrojara el número de fila en el que se encuentra y le restara 1, supongamos que un arroja 16. Entonces la fila que necesitas es la 17 pero la formula le resta 1 ya entenderás porque.

A la celda donde pusiste esta fórmula le puedes poner "Numerodefilas" (asignándole un nombre)

2. Crea el rango dinámico "FILA_BUSCADA". Usa asignar nombre y en se refiere a:

=DESREF(Lahojaconlosdatos!$A$1;Numerodefilas;0;1;3)

Esta fórmula se desplazara de Lahojaconlosdatos!$A$1, 16 celdas hacia abajo 16 + la celda del origen, es igual 17 la fila que necesitas. Por eso se le resta 1.

El tercer argumento es 0 porque no necesitamos que se desplace columnas

El cuarto argumento porque solo necesitamos que copie 1 fila.

El argumento del final "3" puede ser remplazado por la cantidad de columnas de la fila que necesites 3 = (numero, direcion, telefono).

Y no olvides remplazar el nombre de "LaHojaconlosdatos!" con el nombre real de la hoja con los datos.

Una vez hagas esto escribe el número que buscas en la celda designada, cada que lo cambies, el rango "FILA_BUSCADA" se actualiza automáticamente seleccionando la fila que necesitas. NOTA: Los valores en la fila de números no deben repetirse.

Por último la macro será lo mas de sencilla.

Sub Buscar_fila_copiarla ( )

Range("FILA_BUSCADA").Copy

Range("Celdas_de_ destino").Paste

Application.CutCopyMode = False

End Sub

Asígnasela a algún botón y listo.

Muchas gracias Cristian! De verdad muy útil! Me falta un detalle aún. En el macro, en paste, le doy la hoja donde quiero que pegue la fila y la celda y lo hace de maravilla! pero necesito que pegue las filas una debajo de la otra, acumulando la información!! Alguna idea?

Desde ya muchas gracias!!

Claro, y sería casi lo mismo, debes crear otro rango dinámico este rango automáticamente ira descendiendo con cada nuevo paste justo debajo del paste anterior. Como esta macro solo necesita una celda de referencia y automáticamente toma las celdas de los lados. Entonces el rango dinámico quedaría así:

Nombre: Rango_De_Pegado

Se Refiere a:

=DESREF(

1_Argumento: La primera celda desde donde vas a empezar a almacenar (supongamos que es A1);

2_Argumento: CONTARA(A:A) - (El número de celdas que tenga texto, si ninguna tiene entonces no le restes nada);

3_Argumento: 0;

4 y 5 Argumento: 1;1)

Con esto podrás crear el rango dinámico y olvides poner la referencia de la hoja, (Ej: Nombredelahoja! RANGO) para que quede todo bien.

Ahora en la macro únicamente remplaza el rango por el nombre: Ej: Range("Rango_de_pegado"). Paste

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas