Trucos Excel. Archivos de un directorio con una macro

2 Nov

Puede resultarnos útil tener todos los archivos de un directorio en una tabla de excel. Si estamos documentando un proceso, si nos dan un gran número de ficheros y tenemos que realizar procesos repetitivos sobre ellos, si queremos tener inventariados nuestros programas,… Para esto os planteo una macro bien sencilla que recorre un directorio y nos escribe los elementos que encuentra en él. El código visual basic para la macro en Excel no puede ser más sencillo:


Sub explora()
'Macro para poner los archivos de un directorio en una hoja Excel
Dim directorio, nombre_completo, tipo_fichero As String
Dim tam As Long
directorio = "C:\temp"
'Si deseamos especificar el tipo de fichero
tipo_fichero = "*"
'ChDir directorio
directorio = directorio & "\*." & tipo_fichero
'Recorre el directorio hasta que no hay elementos
fichero = Dir(directorio, vb)
i = 1
Do While fichero <> ""
'Pone en un excel vacío los elementos que encuentra
Cells(i, 1) = fichero
i = i + 1
fichero = Dir
Loop
'
End Sub

El «talento» está en el uso de Dir y en la realización del bucle. Como añadido tenemos una variable tipo_fichero que nos permite acotar la extensión de los ficheros a listar. Un truco sencillo y que puede ayudarnos a automatizar mucho código. Yo la cree porque un proceso de SQL SERVER me devolvía un gran número de ficheros de texto distintos cada vez y necesitaba automatizar su lectura. Espero que os sea de utilidad. Saludos.

20 respuestas a «Trucos Excel. Archivos de un directorio con una macro»

  1. Hola, no tengo conocimiento ni formacion en programacion, por lo que no entiedo como utilizar el VB. Probe la macro que usted publica aqui y se detiene el proceso. Yo quiero enlistar, para luego unir, archivos de un directorio. Podría usted explicarme como debo hacerlo?… en la misma forma que pone la macro aqui, le egradecería si me indica donde debo escribir el directorio donde buscar los archivos a unir y la extension de los archivos a buscar. O sea, le pido que me explique paso a paso porque esto esta fuera de mis capacidades.
    Gracias pos su tiempo, pueda o no pueda dedicarse a contestarme

  2. Lo que yo pongo en la macro que usted expone es:
    Sub explora()
    ‘Macro para poner los archivos de un directorio en una hoja Excel
    Dim directorio, nombre_completo, tipo_fichero As String
    Dim tam As Long
    directorio = «C:\Users\inia\Documents\INIA\Antecedentes Laboratorio\Análisis en Proceso CON Enviados al 19-12-12\Análisis en proceso\ENVIADOS\ENVIADOS 2001»
    ‘Si deseamos especificar el tipo de fichero
    tipo_fichero = «.xls»
    ‘ChDir directorio
    directorio = directorio & «C:\Users\inia\Documents\INIA\Antecedentes Laboratorio\Análisis en Proceso CON Enviados al 19-12-12\Análisis en proceso\ENVIADOS\ENVIADOS 2001.xls» & tipo_fichero
    ‘Recorre el directorio hasta que no hay elementos
    fichero = Dir(directorio, vb)
    i = 1
    Do While fichero «»
    ‘Pone en un excel vacío los elementos que encuentra
    Cells(i, 1) = fichero
    i = i + 1
    fichero = Dir
    Loop

    End Sub

    y el proceso se detiene en «fichero = Dir(directorio, vb)»… como debo modificar esto y continuar?

  3. Hola, yo utilizo la orden dir *.slddrw, para listar los archivos de dibujos de solidworks de una carpeta.
    Hay alguna forma de extraer tambien la caracteristica «descripción» de la pestaña de propiedades de esos archivos?

  4. Saludos.

    Muchas gracias por la macro.

    Funcionó a las mil maravillas, solo cambié el directorio que necesitaba yo escanear y sin problemas me listó 940 archivos que estaban ahí almacenados.

    De nuevo muchas gracias.

  5. Mi Amigo,

    Es lo que andaba buscando hace tiempo… esta rutina la estaba haciendo con otra instrucción pero leía muy lento los archivos… ahora anda rapidísimo… Gracias por publicar…
    Saludos de Chile…

  6. Hola,
    No entiendo mucho como generar la macro para unir varios archivos en uno solo.
    Mis archivos originales están en:

    C: ARCHIVOS ATLANTIS

    y se llaman Directorio1, Directorio2

    los quiero resguardar en:

    C: ARCHIVOS UNIDOS DE ATLANTIS

    Gracias por ayudarme,

  7. como puedo hacer para que no se listen los archivos del sistema, me explico:
    tengo una carpeta con canciones (.mp3), al ejecutar la macro lista las canciones pero tambien los archivos del sistema (fotos de los albumes de cada cancion, thumbs, etc.) lo cual no deseo.
    hace un tiempo escuche de un código que evitaba esto.
    ojala puedas ayudarme.
    gracias.

    • entiendo, pero eso limitaría a solo listar archivos mp3, si quisiera listar carpetas con diferentes tipos de archivos ya no serviría.
      lo que necesito es un código que evite listar especificamente los archivos inherentes al sitema.

  8. amigo, tengo una macro que lista archivos y subcarpetas, sé que de estas hay muchas en la red, lo novedoso de esta macro es que lista pero con aspecto de explorador, además hipervincula cada archivo listado para poder abrirlo/reproducirlo.
    necesito un correo tuyo para enviártela y puedas revisarla y mejorarla, además de comentarla en el bolg.
    mi correo es: hausser_zavaleta@hotmail.com
    espero tu respuesta.

  9. Buenas tardes!

    Tengo una macro parecida a la tuya para listar los archivos de una carpeta en una columna de excel.
    Lo que necesitaría hacer es que solo copie en excel aquellos archivos creados en desde cierta fecha.
    En la carpeta hay mas de 10.000 archivos .pdf y quería solo listar los de el año 2017.
    Es posible realizar este filtrado?
    Agradeco respuesta.
    Un saludo
    André

  10. Hola,
    Necesito que la macro se posicione en un archivo concreto y en el poder elegir una subcarpeta existente en este mismo directorio que liste su contenido y pulsando en el pdf elegido, verlo en pantalla.
    Gracias por adelantado!!!!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *