viernes, 30 de diciembre de 2011

Procesar serie de Archivos

Uno de los usos mas comunes que le damos a las macros es el de repetir una operación un determinado numero de veces. El ejemplo que exponemos a continuación nos muestra como manejar diferentes archivos almacenados en el disco.

Lo primero que hacemos es dar las especificaciones que deben de cumplir los archivos que queremos manejar, en este caso de texto.

Como nota importante, al iniciar el procedimiento y al no saber que cantidad de archivos nos puede dar la búsqueda, utilizamos la instrucción ReDim para redimensionar la matriz preservando (Preserve) los datos.

Sub ProcesoMatriz()
Dim ArchivoSpec As String
Dim i As Integer
Dim NombreArchivo As String
Dim ListaArchivos() As String
Dim ArchivosEncontrados As Integer

ArchivoSpec = ThisWorkbook.Path & "\" & "*.txt"
NombreArchivo = Dir(ArchivoSpec)

    If NombreArchivo <> "" Then
        ArchivosEncontrados = 1
        ReDim Preserve ListaArchivos(1 To ArchivosEncontrados)
        ListaArchivos(ArchivosEncontrados) = NombreArchivo
    Else
        MsgBox "No se encontraron archivos que coinciden con " & ArchivoSpec
        Exit Sub
    End If
   
    Do
        NombreArchivo = Dir
        If NombreArchivo = "" Then Exit Do
        ArchivosEncontrados = ArchivosEncontrados + 1
        ReDim Preserve ListaArchivos(1 To ArchivosEncontrados)
        ListaArchivos(ArchivosEncontrados) = NombreArchivo & "*"
        Loop
       
    For i = 1 To ArchivosEncontrados
        Call ProcesaArchivo(ListaArchivos(i))
    Next i
End Sub

La función Dir nos devuelve  el nombre de un archivo, directorio o carpeta que coincide con el patrón o atributo de archivo especificado.

En este caso, importamos el archivo e introducimos una serie de formulas de resumen que describen los datos del archivo.

Los archivos que cumplen la especificación dada se almacenan en la Matriz ListaArchivos, el procedimiento utiliza el bucle For – Next para procesarlos. Dentro del bucle llamamos al procedimiento ProcesarArchivo.


El procedimiento ProcesarArchivo  importa el archivo y luego inserta las cinco formulas.

Sub ProcesaArchivo(NombreArchivo As String)
Workbooks.OpenText Filename:=NombreArchivo

Range("D1").Value = "A"
Range("D2").Value = "B"
Range("D3").Value = "C"
Range("E1:E3").Formula = "=COUNTIF(A:A,D1)"
Range("F1:F3").Formula = "=SUMAIF(A:A,D1,B:B)"
End Sub


El método Workbooks.OpenText Carga y redistribuye un archivo de texto en forma de libro nuevo con una sola hoja que contiene los datos redistribuidos del archivo de texto.

Cualquier duda al respecto de lo comentado en el post no dudéis en exponerlo.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.