Necesito crear una macro para extraer datos específicos de un libro 1 a un libro 2

Necesito crear una macro para extraer datos del Libro 1 a un libro 2, en
el Libro 1 columna “A” tengo diversos valores de indicadores y sólo debo
extraer los que sean iguales a 23 con su respectivo valor de tiempo alojado que
se encuentra en la columna "E"y dichos valores deben alojarse en el Libro 2 en la columna "D"y en la columna "E" .
Ejemplo:

Libro 1 Libro 2

A B C D E F A B C D E F

23 2 23 2

23 1 23 1

30 4 23 3

23 3 23 1

36 2

23 1

1 Respuesta

Respuesta
1

Pon la siguiente macro en un libro nuevo.

Sigue las Instrucciones para un botón y
ejecutar la macro
1. Abre tu libro de Excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Ahora para crear un botón, puedes hacer lo siguiente:
6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona Asignar macro / Selecciona: abrirybuscar
9. Aceptar.
10. Para ejecutarla dale click a la imagen.

Sub abrirybuscar()
'Por.DAM
archivo1 = Application.GetOpenFilename
If archivo1 = False Then Exit Sub
archivo2 = Application.GetOpenFilename
If archivo2 = False Then Exit Sub
Workbooks.Open archivo1
Set l1 = ActiveWorkbook
Set h1 = l1.ActiveSheet
Workbooks.Open archivo2
Set l2 = ActiveWorkbook
Set h2 = l2.ActiveSheet
j = 1
For i = 1
To h1.Range("A" & Rows.Count).End(xlUp).Row
    If h1.Cells(i, "A") = 23 Then
        h2.Cells(j, "D") = 23
        h2.Cells(j, "E") = h1.Cells(i, "E")
        j = j + 1
    End If
Next
L1. Close
L2. Save
L2. Close
End Sub

Lo que hace la macro es abrir una ventana de diálogo para que abres el libro1, luego aparece otra ventana de diálogo para que abras el libro 2. Después de abrir los libros, la macro revisa el libro 1 y lo que diga 23 lo pasa al libro 2.

Saludos. Dante Amor
Si es lo que necesitas.

Hola, ejecute la macro pero no funciona me da un error en la línea después de la definición de las variables, por otra parte los libros ya deben estar abiertos para poder ejecutar la macro, por favor indícame como modificar la macro eliminando la apertura de los libros y dejando solamente la revisión del libro 1 y la carga de datos en el libro 2.

Volví hacer la prueba ya no arroja error en el código pero no carga la información en el libro 2 sólo genera las pantallas para abrir los archivos, sin embargo como te indique anteriormente los archivos deben estar abiertos y la macro sólo debe contemplar revisar en libro1 y lo que diga 23 en la columna A pasarlo a libro 2 junto con la información que tiene asociada en la columna E del libro 1.

La macro funciona bien. En un tercer libro tienes que poner la macro; abrir el libro1 y luego el libro2. También tienes que revisar que efectivamente en el libro1 en la columna "A" tengas filas con el número 23. También revisa que tengas un 23 como número y no un 23 como texto. Si no lo quieres así. Tienes que decirme cómo se llaman los libros.

El libro que contiene la información se llama Sub-Indicadores y el libro donde debe alojarse la información se llama Calculo_Indicador, volví a correr la macro y no funciona, tengo en la columna "A" datos =23 y están como números. Te explico nuevamente lo que necesito, ambos libros están abiertos, ya tengo creado un botón en el libro Calculo_Indicador desde donde debe ejecutarse la macro, la macro debe extraer todos los valores =23 contenidos en la columnna "A" del libro Sub-Indicadores con su respectivo valor de tiempo que se encuentra en la columna "E" del mismo libro, ambos valores deben cargarse en el libro Calculo_Indicador en las columnas D (debe contener valor de la columna A libro Sub-Indicadores) y en la columna E (debe contener valor de la columna E libro Sub-Indicadores).

Espero haberme explicado mejor.

Disculpa, la macro no se copió bien. Esta línea debe ir junta:

For i = 1
To h1.Range("A" & Rows.Count).End(xlUp).Row

Esta es la macro original.

Sub abrirybuscar()
'Por.DAM
archivo1 = Application.GetOpenFilename
If archivo1 = False Then Exit Sub
archivo2 = Application.GetOpenFilename
If archivo2 = False Then Exit Sub
Workbooks.Open archivo1
Set l1 = ActiveWorkbook
Set h1 = l1.ActiveSheet
Workbooks.Open archivo2
Set l2 = ActiveWorkbook
Set h2 = l2.ActiveSheet
j = 1
For i = 1 To h1.Range("A" & Rows.Count).End(xlUp).Row
 If h1.Cells(i, "A") = 23 Then
 h2.Cells(j, "D") = 23
 h2.Cells(j, "E") = h1.Cells(i, "E")
 j = j + 1
 End If
Next
l1.Close
l2.Save
l2.Close
End Sub

Ahora, si ya tienes los libros abiertos. Utiliza esta macro

Sub abrirybuscar()
'Por.DAM
Set l1 = ActiveWorkbook
Set h1 = l1.ActiveSheet
Set l2 = Workbooks("Sub-Indicadores")
Set h2 = l2.ActiveSheet
j = 1
For i = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
 If h2.Cells(i, "A") = 23 Then
 h1.Cells(j, "D") = 23
 h1.Cells(j, "E") = h2.Cells(i, "E")
 j = j + 1
 End If
Next
End Sub

No mencionaste en qué fila se deben pegar los valores encontrados, empiezan a colocarse en la fila 1 del libro "Calculo_Indicador" en la hoja que tengas activa.

Disculpa nuevamente el malentendido. Prueba las macros y me comentas.

Saludos. DAM

Si te funciona la solución podrías finalizar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas