Modificar macro que extrae datos devarios archivos
Podría alguien ayudarme a modificar una macro que extrae datos.
![Rafael Vera](http://blob.todoexpertos.com/avatars/sm/8jbthfkprohqyrp5.jpg?v=12)
Estoy aquí para ayudarte a modificar tu macro para extraer datos de varios archivos. Por favor, proporciona más detalles sobre qué tipo de datos deseas extraer y cómo se encuentran estructurados en los archivos. Además, si tienes algún código existente que podamos utilizar como punto de partida, por favor compártelo para poder entender mejor tu situación y brindarte una solución adecuada.
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
Buenas tardes,
Encontré una macro del Sr. Dante en internet la cual extrae información de varios archivos pero no tiene un rango de fila ni columna las cuales se necesitan, pero necesito que primero compare la fecha (mes y año) de una celda que esta en archivo principal contra la fecha (mes y año) de una celda que esta en los archivos de donde va a extraer toda la información.
Sub Importar_Datos() ' ' Por.Dante Amor ' ' Set l1 = ThisWorkbook Set h1 = l1.Sheets("Valores") Set h2 = l1.Sheets("Resumen") h2.Cells.ClearContents ' ruta = h1.[B5] hoja = h1.[B6] fila = h1.[B7] colu = h1.[B8] ' mensaje = validaciones(ruta, hoja, fila, colu) If mensaje <> "" Then MsgBox mensaje, vbExclamation, "IMPORTAR ARCHIVOS" Exit Sub End If ' Application.ScreenUpdating = False Application.DisplayAlerts = False Application.StatusBar = False Application.Calculation = xlCalculationManual ' If Right(ruta, 1) <> "\" Then ruta = ruta & "\" arch = Dir(ruta & "*.xls*") i = 0 Do While arch <> "" i = i + 1 Application.StatusBar = "Importando Libro : " & i & " de : " & n Set l2 = Workbooks.Open(ruta & arch) existe = False If IsNumeric(hoja) Then If l2.Sheets.Count >= hoja Then existe = True Set h22 = l2.Sheets(hoja) Else End If Else For Each h In l2.Sheets If LCase(h.Name) = LCase(hoja) Then existe = True Set h22 = l2.Sheets(hoja) Exit For End If Next End If ' If existe Then u22 = h22.Range(colu & Rows.Count).End(xlUp).Row u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1 h22.Rows(fila & ":" & u22).Copy h2.Range("A" & u2).PasteSpecial xlValues End If ' l2.Close False arch = Dir() Loop ' Application.ScreenUpdating = True Application.DisplayAlerts = True Application.StatusBar = False Application.Calculation = xlCalculationAutomatic ' MsgBox "Proceso terminado, archivos importados a la hoja resumen", vbInformation, "IMPORTAR ARCHIVOS" End Sub
SAludos,
MG
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
Tengo archivos de varios meses en una carpeta y necesito que la macro extraiga solo la información del mes que deseo trabajar.
![Rafael Vera](http://blob.todoexpertos.com/avatars/sm/8jbthfkprohqyrp5.jpg?v=12)
Aquí tienes una versión modificada de la macro:
Sub Importar_Datos() ' ' Por.Dante Amor ' ' Set l1 = ThisWorkbook Set h1 = l1.Sheets("Valores") Set h2 = l1.Sheets("Resumen") h2.Cells.ClearContents ' ruta = h1.[B5] hoja = h1.[B6] fila = h1.[B7] colu = h1.[B8] fechaBusqueda = h1.[B9] ' Agrega la celda de la fecha que deseas buscar en el archivo principal ' mensaje = validaciones(ruta, hoja, fila, colu) If mensaje <> "" Then MsgBox mensaje, vbExclamation, "IMPORTAR ARCHIVOS" Exit Sub End If ' Application.ScreenUpdating = False Application.DisplayAlerts = False Application.StatusBar = False Application.Calculation = xlCalculationManual ' If Right(ruta, 1) <> "\" Then ruta = ruta & "\" arch = Dir(ruta & "*.xls*") i = 0 Do While arch <> "" i = i + 1 Application.StatusBar = "Importando Libro : " & i & " de : " & n Set l2 = Workbooks.Open(ruta & arch) existe = False If IsNumeric(hoja) Then If l2.Sheets.Count >= hoja Then existe = True Set h22 = l2.Sheets(hoja) End If Else For Each h In l2.Sheets If LCase(h.Name) = LCase(hoja) Then existe = True Set h22 = l2.Sheets(hoja) Exit For End If Next End If ' If existe Then u22 = h22.Range(colu & Rows.Count).End(xlUp).Row u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1 ' Agregar la condición de comparación de fechas fechaArchivo = h22.Range("A1").Value ' Suponiendo que la fecha está en la columna A y en la primera fila del archivo If Month(fechaArchivo) = Month(fechaBusqueda) And Year(fechaArchivo) = Year(fechaBusqueda) Then h22.Rows(fila & ":" & u22).Copy h2.Range("A" & u2).PasteSpecial xlValues End If End If ' l2.Close False arch = Dir() Loop ' Application.ScreenUpdating = True Application.DisplayAlerts = True Application.StatusBar = False Application.Calculation = xlCalculationAutomatic ' MsgBox "Proceso terminado, archivos importados a la hoja resumen", vbInformation, "IMPORTAR ARCHIVOS" End Sub
- Compartir respuesta
![](/content/images/user_nophoto_small.png)
1 respuesta más de otro experto
![Dante Amor](http://blob.todoexpertos.com/avatars/sm/4ozn3xagb5emg.jpg?v=40)
Aquí hay unos ejemplos:
Ordenar datos en una matriz - YouTube
Anidar la función SI - YouTube
Sal u dos
Dante Amor
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
Saludos, Sr. Dante
Gracias anticipadas por tomarmi solicitud.
La primera macro podría servirme para la extracción de información que esta en las filas y columnas de varios archivos, solo hace falta incluir una condición la cual compare la fecha(mes) que este en una celda especifica del archivo principal contra la fecha(mes) que esta en una celda especifica en los archivos de origen.
Saludos,
MG
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
Sr Rafael, por casualidad espefico a la macro desde cual fila hasta que columna leer?
para mi es importante el rango de fila y columna.
Gracias anticipadas,
MG
![Dante Amor](http://blob.todoexpertos.com/avatars/sm/4ozn3xagb5emg.jpg?v=40)
¿Tiene algún inconveniente para ayudarme?
Ningún inconveniente.
Las explicaciones están en los enlaces.
Sal u dos
Dante Amor
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
Buenas tardes Sr.DAnte
Los enlaces hablan de celdas especificas, es decir A8 y i41, yo necesito que la macro tome las informaciones desde una celda hasta otra celda.
Ej: libro A= donde se colocara la macro para almacenar toda la información.
Libros B-C-D= donde están los datos que la macro extraerá los cuales están desde la celda A8 hasta la celda K41. La macro debe tomar toda la información del libro B y llevarlo al libro A, luego toma las del libro C y luego las del libro D
Gracias MG
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
En resumen, Sr. DAnte, lo que deseo es unir todas las informaciones que están en varios libros en un solo libro.
MG
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
Sr. Dante la macro que esta en el link crea un nuevo libro y yo necesito que ponga la información en un libro especifico llamado ¨¨Agrupado¨¨
De todas forma no saco la información.
Le envíe a su correo tres libros como ejemplo.
Libro llamado ¨¨Agrupado¨¨
Libros donde están las informaciones ¨¨caja chica¨¨
![maximo gomez](http://blob.todoexpertos.com/letters/M_58_48.png?v=1)
Ese fue el que encontré en su canal.
Años atrás yo le llegue a enviar varios archivos a este correo y ud.me ayudo.
![Dante Amor](http://blob.todoexpertos.com/avatars/sm/4ozn3xagb5emg.jpg?v=40)
Te paso la macro:
Sub Agrupar() 'Por Dante Amor ' Dim sh1 As Worksheet, sh2 As Worksheet Dim wb1 As Workbook, wb2 As Workbook Dim arch As String Dim i As Long Dim c As Range ' Application.ScreenUpdating = False Set wb1 = ThisWorkbook Set sh1 = wb1.Sheets("AGRUPADO") ' arch = Dir(wb1.Path & "\" & "*.xls*") ' i = 8 Do While arch <> "" If arch <> wb1.Name Then Set wb2 = Workbooks.Open(wb1.Path & "\" & arch) Set sh2 = wb2.Sheets(1) For Each c In sh2.Range("A8:A41") If c.Value <> "" Then sh1.Range("A" & i).Resize(1, 9).Value = c.Resize(1, 9).Value i = i + 1 End If Next wb2.Close False End If arch = Dir() Loop ' Application.ScreenUpdating = True End Sub
Lo nuevo:
Sal u dos
Dante Amor
- Compartir respuesta
![](/content/images/user_nophoto_small.png)