在本文中,我们将创建一个宏,以将文件夹中多个工作簿中的数据复制到新工作簿中。

我们将创建两个宏;一个宏只会将记录从第一列复制到新工作簿,而第二个宏会将所有数据复制到其中。

此示例的原始数据包括员工的出勤记录。

在TestFolder中,我们有多个Excel文件。 Excel文件的文件名以“ ddmmyyyy”格式表示特定日期。

ArrowFilesSource

每个Excel文件都包含该特定日期在职员工的日期,员工ID和员工姓名。

ArrowRawFile

我们创建了两个宏; “ CopyingSingleColumnData”和“ CopyingMultipleColumnData”。 “ CopyingSingleColumnData”宏将仅将文件夹中所有文件的第一列中的记录复制到新工作簿中。 “ CopyingMultipleColumnData”宏会将文件夹中所有文件中的所有数据复制到新工作簿中。

单击“复制单列”按钮可以执行“ CopyingSingleColumnData”宏。单击“复制多列”按钮可以执行“ CopyingMultipleColumnData”宏。

在运行宏之前,必须在文本框中指定放置Excel文件的文件夹的路径。

ArrowMain

单击“复制单列”按钮时,将在定义的文件夹中生成一个新的工作簿“ ConsolidatedFile”,该工作簿将包含该文件夹中所有文件的第一列的合并数据。仅在第一列中包含记录。获得合并数据后,我们可以通过对日期数进行计数来找出特定日期的雇员人数。特定日期的计数将等于该特定日期的雇员人数

ArrowAfterRunningSingleColumnMacro

|单击“复制多列”按钮,它将在定义的文件夹中生成新的工作簿“ ConsolidatedAllColumns”。该工作簿将包含来自该文件夹中所有文件的所有记录的合并数据。

ArrowOutputAfterRunningSingleMacro

创建的新工作簿将包含文件夹中所有文件的所有记录。获得合并数据后,我们将在一个文件中提供所有出勤详细信息。我们可以轻松地找到该特定日期在职员工的数量,并获得该特定日期在职员工的姓名。

ArrowRunningSecondMacro

ArrowFileAfterRunningSecondMacro

代码说明

Sheet1.TextBox1.Value上面的代码用于从工作表“ Sheet1”中获取插入到文本框“ TextBox1”中的值。

Dir(FolderPath&“ * .xlsx”)

上面的代码用于获取文件名称,文件扩展名为“ .xlsx”。我们为多个字符文件名使用通配符*。

而FileName <>“”

Count1 = Count1 +1 ReDim保留FileArray(1到Count1)

FileArray(Count1)= FileName FileName = Dir()

Wend Above代码用于获取文件夹中所有文件的文件名。

对于i = 1到UBound(FileArray)

Next上面的代码用于遍历文件夹中的所有文件。

Range(“ A1”,Cells(LastRow,1))。Copy DestWB.ActiveSheet.Cells(LastDesRow,1)

上面的代码用于将记录从第一列复制到目标工作簿。

Range(“ A1”,ActiveCell.SpecialCells(xlCellTypeLastCell))。Copy DestWB.ActiveSheet.Cells(LastDesRow,1)

上面的代码用于将所有记录从活动工作簿复制到目标工作簿。

请遵循以下代码

如果您喜欢此博客,请在Facebook和Facebook上与您的朋友分享。

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

我们很希望收到您的来信,请让我们知道我们如何才能改善我们的工作并使您的工作更好。写信给我们[email protected]