Macro abrir múltiples archivos excel para actualizar información

Tengo un archivo que tiene que coger información de ~500 archivos que guardaré todos en la misma carpeta.

La idea es guardar en una línea de excel "Maestro" la información de cada uno de los otros archivos. El nombre de los archivos lo tendré en una columna. Necesito una macro que recorra la columna, lea el nombre del archivo en cada línea, lo abra, rellene y lo cierre.

Conceptualmente creo que es así, pero no tengo ni idea de como programarlo XD

1 respuesta

Respuesta
1

Entiendo lo siguiente: Vas a tener un archivo "Maestro" con la macro, en una columna vas a tener los nombres de los archivo, quieres que la macro tome un archivo de esa lista, lo abra, lo rellene, lo guarde y lo cierre. Y así con cada uno de los archivos de la lista, ¿correcto?

Mi duda es: ¿Con qué se va a rellenar?

El "relleno" supongo que estará en el libro "Maestro", me tienes que decir de qué hoja y de qué celdas tomo ese "relleno"

Y también me tienes que decir, en el libro destino, en qué hoja y en qué celdas quieres que ponga el "relleno".

Hola,

es al revés. Los distintos archivos van a tener información en diferentes celdas (son como respuestas a una encuesta), y hay que traerla al archivo maestro.

Yo había pensado hacerlo con la función indirect, de tal forma que los campos estén prerellenos (en la columna A tendré el nombre del archivo y en la fila 1 las celdas de las que cogerlo). Así sólo tendría que abrir cada archivo y que fuera "calculando" cada línea cuando el archivo esté abierto.

De todas formas si hay otra forma más fácil pues mucho mejor!

Puede ser con la macro o con fórmulas. Cómo quieres que se haga.

De la forma que sea me tienes que decir de qué libro, de qué hoja de qué celda se toma la información y se pone en qué libro, en qué hoja y en qué celda.

Hola: muchas gracias! perdona por no explicarme bien, pero es que es un poco difícil.

A mi me da igual la forma, no domino demasiado de excel y menos de macros. El problema es que son muchas celdas, por eso decía lo de poner en las columnas de la fila 1 las referencias de las celdas que hay que coger (que son las mismas en todos los excels), y que la macro para cada columna simplemente abriera un excel (cuyo nombre esté en la columna A) y busque todos los datos de esa fila (unas 20 columnas en total), que ya tendrán la fórmula con la referencia con indirect (creo que sería algo como = INDIRECT("'["&A1&".xls]"&"nombre pestaña"&"'!"& B1) para la celda B2)

Luego cierre ese excel, pase a la siguiente fila, y vuelva a calcular, y así hasta llegar al final.

Ya tienes las fórmulas creadas, ¿o esa parte también quieres que te ayude?

Me puedes enviar 2 archivos, 1 archivo el "Maestro" y otro archivo de ejemplo.

Las celdas que se van a tomar del archivo ejemplo me las pintas de amarillo y de igual manera en el "maestro" pones los resultados que esperas y también los pintas de amarillo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Alvaro Fresnillo” y el título de esta pregunta.

Hola,

ya te he pasado los documentos por email.

Como verás, ya tengo una macro que pone todos los nombres de los archivos en la columna A, y con las formulas, ya tengo referenciadas las celdas de las que coger la información (sólo lo he hecho para la fila 2, pero sería arrastrar a las demás.

El problema es que cuando no tengo abiertos los archivos aparecen #REF. por lo que la macro debería ir abriendo cada uno de los archivos y cuando la información se actualice copiarla y pegarla como valores en otra pestaña, o algo así (en realidad como a tí te parezca más fácil), pero lo que quiero es que la información aparezca entera sin tener que abrir todos los archivos.

Si no me he explicado bien avísame!

Muchísimas gracias!

Te anexo la macro para abrir los archivos y pegar la información como valores en otra hoja

Sub AbrirArchivos()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set h1 = Sheets("Sheet1")
    Set h2 = Sheets("Sheet2")
    h2.Cells.Clear
    ruta = ThisWorkbook.Path & "\"
    ChDir ruta
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        Set l2 = Workbooks.Open(h1.Cells(i, "A"))
        h1.Rows(i).Copy
        h2.Rows(i).PasteSpecial Paste:=xlValues
        l2.Close False
    Next
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas