在本文中,我们将创建一个宏以将数据从工作簿中的所有工作表复制到新工作表。

此示例的原始数据由不同工作表中不同部门的员工详细信息组成。我们希望将员工详细信息整合到一个表中。

ArrowRawData

我们创建了“ CopyRangeFromMultipleSheets”宏来合并数据。单击“合并数据”按钮可以运行此宏。

ArrowMain

宏将创建一个新的工作表,并插入所有工作表中的合并数据。

ArrowOutput

代码说明

“遍历”所有工作表以检查是否存在“主”工作表。

对于ThisWorkbook.Worksheets中的每个源如果Source.Name =“ Master”,则MsgBox“ Master表已存在”

如果下一个上面的代码,退出子结束,用于检查工作簿中是否存在“母版”表。如果工作簿中存在“母版”表,则代码将退出并显示错误消息。

Source.Range(“ A1”)。SpecialCells(xlLastCell).Row上面的代码用于获取工作表中最后一个单元格的行号。

Source.Range(“ A1”,Range(“ A1”)。SpecialCells(xlLastCell))。Copy Destination.Range(“ A”&DestLastRow)

上面的代码用于将指定范围复制到定义的单元格。

请遵循以下代码

Sub CopyRangeFromMultipleSheets()

'Declaring variables

Dim Source As Worksheet

Dim Destination As Worksheet

Dim SourceLastRow, DestLastRow As Long

Application.ScreenUpdating = False

'Looping through all sheets to check whether "Master" sheet exist

For Each Source In ThisWorkbook.Worksheets

If Source.Name = "Master" Then

MsgBox "Master sheet already exist"

Exit Sub

End If

Next

'Inserting a new sheet after the "Main" sheet

Set Destination = Worksheets.Add(after:=Sheets("Main"))

Destination.Name = "Master"

'Looping through all the sheets in the workbook

For Each Source In ThisWorkbook.Worksheets



'Preventing consolidation of data from "Main" and "Master" sheet

If Source.Name <> "Main" And Source.Name <> "Master" Then



SourceLastRow = Source.Range("A1").SpecialCells(xlLastCell).Row



Source.Activate



If Source.UsedRange.Count > 1 Then



DestLastRow = Sheets("Master").Range("A1").SpecialCells(xlLastCell).Row



If DestLastRow = 1 Then

'copying data from the source sheet to destination sheet

Source.Range("A1", Range("A1").SpecialCells(xlLastCell)).Copy Destination.Range("A" & DestLastRow)

Else

Source.Range("A2", Range("A1").SpecialCells(xlCellTypeLastCell)).Copy Destination.Range("A" & (DestLastRow + 1))

End If



End If

End If

Next

Destination.Activate

Application.ScreenUpdating = True

End Sub

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

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