En este artículo, crearemos una macro para copiar datos de varios libros de trabajo en una carpeta a un nuevo libro de trabajo.

Crearemos dos macros; una macro solo copiará los registros de la primera columna al nuevo libro de trabajo y la segunda macro copiará todos los datos en él.

Los datos brutos de este ejemplo consisten en registros de asistencia de los empleados.

En TestFolder, tenemos varios archivos de Excel. Los nombres de los archivos de Excel representan una fecha particular en formato «ddmmyyyy».

ArrowFilesSource

Cada archivo de Excel contiene la fecha, la identificación del empleado y el nombre del empleado de los empleados que estuvieron presentes ese día en particular.

ArrowRawFile

Hemos creado dos macros; «CopyingSingleColumnData» y «CopyingMultipleColumnData». La macro «CopyingSingleColumnData» solo copiará los registros de la primera columna de todos los archivos en la carpeta al nuevo libro de trabajo. La macro «CopyingMultipleColumnData» copiará todos los datos de todos los archivos en la carpeta al nuevo libro de trabajo.

La macro «CopyingSingleColumnData» se puede ejecutar haciendo clic en el botón «Copiar una sola columna». La macro «CopyingMultipleColumnData» se puede ejecutar haciendo clic en el botón «Copiar varias columnas».

Antes de ejecutar la macro, hay que especificar la ruta de la carpeta en el cuadro de texto, donde se colocan los archivos de Excel.

ArrowMain

Cuando se hace clic en el botón «Copiar una sola columna», se generará un nuevo libro de trabajo «ConsolidatedFile» en la carpeta definida. Este libro de trabajo contendrá datos consolidados de la primera columna de todos los archivos de la carpeta.

ArrowAfterRunningSingleColumnMacro

El nuevo libro de trabajo contienen solo registros en la primera columna. Una vez que tenemos los datos consolidados, podemos averiguar el número de empleados presentes en un día en particular contando el número de fecha. El conteo de una fecha en particular será igual al número de empleados presentes en ese día.

ArrowOutputAfterRunningSingleMacro

Cuando se hace clic en el botón «Copiar varias columnas», se generará el nuevo libro de trabajo «ConsolidatedAllColumns» en la carpeta definida. Este libro de trabajo contendrá datos consolidados de todos los registros de todos los archivos de la carpeta.

ArrowRunningSecondMacro

El nuevo libro de trabajo creado contendrá todos los registros de todos los archivos de la carpeta. Una vez que tenemos los datos consolidados, tenemos todos los detalles de asistencia disponibles en un solo archivo. Podemos encontrar fácilmente la cantidad de empleados presentes ese día en particular y también obtener los nombres de los empleados que estuvieron presentes ese día en particular.

ArrowFileAfterRunningSecondMacro

Explicación del código

Sheet1.TextBox1.Value El código anterior se utiliza para insertar el valor en el cuadro de texto «TextBox1» de la hoja «Sheet1».

Dir (Ruta de carpeta & «* .xlsx»)

El código anterior se utiliza para obtener el nombre del archivo, que tiene la extensión «.xlsx». Hemos utilizado comodines * para nombres de archivos de varios caracteres.

Mientras FileName <> «»

Count1 = Count1 + 1 ReDim Preserve FileArray (1 para Count1)

FileArray (Count1) = FileName FileName = Dir ()

El código Wend Above se usa para obtener los nombres de todos los archivos de la carpeta.

Para i = 1 a UBound (FileArray)

Siguiente El código anterior se utiliza para recorrer todos los archivos de la carpeta.

Rango («A1», Celdas (LastRow, 1)). Copiar DestWB.ActiveSheet.Cells (LastDesRow, 1)

El código anterior se usa para copiar el registro de la primera columna al libro de trabajo de destino.

Range («A1», ActiveCell.SpecialCells (xlCellTypeLastCell)). Copiar DestWB.ActiveSheet.Cells (LastDesRow, 1)

El código anterior se usa para copiar todo el registro del libro activo al libro de destino.

Siga a continuación el código

Option Explicit

Sub CopyingSingleColumnData()

'Declaring variables

Dim FileName, FolderPath, FileArray(), FileName1 As String

Dim LastRow, LastDesRow, Count1, i As Integer

Dim SourceWB, DestWB As Workbook

Application.ScreenUpdating = False

FolderPath = Sheet1.TextBox1.Value

'Inserting backslash in the folder path if backslash(\) is missing

If Right(FolderPath, 1) <> "\" Then

FolderPath = FolderPath & "\"

End If

'Searching for Excel files

FileName = Dir(FolderPath & "*.xlsx")

Count1 = 0

'Looping through all the Excel files in the folder

While FileName <> ""

Count1 = Count1 + 1

ReDim Preserve FileArray(1 To Count1)

FileArray(Count1) = FileName

FileName = Dir()

Wend

'Creating a new workbook

Set DestWB = Workbooks.Add

For i = 1 To UBound(FileArray)

'Finding the last row in the workbook

LastDesRow = DestWB.ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row

'Opening the Excel workbook

Set SourceWB = Workbooks.Open(FolderPath & FileArray(i))

LastRow = ActiveCell.SpecialCells(xlCellTypeLastCell).Row

'Pasting the copied data to last row in the destination workbook

If LastDesRow = 1 Then

'Copying the first column to last row in the destination workbook

Range("A1", Cells(LastRow, 1)).Copy DestWB.ActiveSheet.Cells(LastDesRow, 1)

Else

Range("A1", Cells(LastRow, 1)).Copy DestWB.ActiveSheet.Cells(LastDesRow + 1, 1)

End If

SourceWB.Close False

Next

'Saving and closing a new Excel workbook

DestWB.SaveAs FileName:=FolderPath & "ConsolidatedFile.xlsx"

DestWB.Close

Set DestWB = Nothing

Set SourceWB = Nothing

End Sub

Sub CopyingMultipleColumnData()

'Declaring variables

Dim FileName, FolderPath, FileArray(), FileName1 As String

Dim LastRow, LastDesRow, Count1, i As Integer

Dim SourceWB, DestWB As Workbook

Application.ScreenUpdating = False

FolderPath = Sheet1.TextBox1.Value

'Inserting backslash in the folder path if backslash(\) is missing

If Right(FolderPath, 1) <> "\" Then

FolderPath = FolderPath & "\"

End If

'Searching for Excel files

FileName = Dir(FolderPath & "*.xlsx")

Count1 = 0

'Looping through all the Excel files in the folder

While FileName <> ""

Count1 = Count1 + 1

ReDim Preserve FileArray(1 To Count1)

FileArray(Count1) = FileName

FileName = Dir()

Wend

'Creating a new workbook

Set DestWB = Workbooks.Add

For i = 1 To UBound(FileArray)

'Finding the last row in the workbook

LastDesRow = DestWB.ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row

'Opening the Excel workbook

Set SourceWB = Workbooks.Open(FolderPath & FileArray(i))

'Pasting the copied data to last row in the destination workbook

If LastDesRow = 1 Then

'Copying all data in the worksheet to last row in the destination workbook

Range("A1", ActiveCell.SpecialCells(xlCellTypeLastCell)).Copy DestWB.ActiveSheet.Cells(LastDesRow, 1)

Else

Range("A1", ActiveCell.SpecialCells(xlCellTypeLastCell)).Copy DestWB.ActiveSheet.Cells(LastDesRow + 1, 1)

End If

SourceWB.Close False

Next

'Saving and closing a new Excel workbook

DestWB.SaveAs FileName:=FolderPath & "ConsolidatedAllColumns.xlsx"

DestWB.Close

Set DestWB = Nothing

Set SourceWB = Nothing

End Sub

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]