实际工作中,我们往往将同一种类型的数据表保存为一个工作簿(一个Excel
文件),然后按不同日期、部门或其他属性在工作簿里创建多个工作表录入数据。有时候不免有将这些分开的工作表合并到一个工作表中的需求。满足这个需求有很多方法,分工作表数量较多时利用VBA
来实现不失为一个简单高效的途径。
每一个工作表(Worksheet
)都有一个属性UsedRange
,这个属性记录了该工作表中已使用的区域。利用这个属性可以轻松复制每个工作表中的内容,也能轻松计算出工作表中空白区域的起始位置。以下代码利用这一属性实现了将工作簿中的其他工作表合并到第一个工作表中。
Sub 工作表合并()
Dim i%, row%, usedRows%, usedColumns%, sheetCombined As Worksheet
' 指定合并表为哪一个工作表,这里是第一个
Set sheetCombined = Worksheets(1)
' 遍历分表,复制其内容粘贴到总表里
For i = 2 To Worksheets.Count
' 求出分表有数据的行数和列数
usedRows = Worksheets(i).UsedRange.Rows.Count
usedColumns = Worksheets(i).UsedRange.Columns.Count
' 复制分表数据内容。我这里是排除标题行不复制,如果不排除标题行,
' 上两行加下两行代码直接用Worksheets(i).UsedRange.Copy替换即可
Worksheets(i).Range(Worksheets(i).Cells(2, 1), _
Worksheets(i).Cells(usedRows, usedColumns)).Copy
' 求出总表中未编辑区域最小行号
row = sheetCombined.UsedRange.Rows.Count + 1
' 将复制出来的数据粘贴到总表未编辑区域中
sheetCombined.Cells(row, 1).PasteSpecial
Next
End Sub
以上代码运行示例如下(示例中不同工作表结构相同,实际上结构不同也可以合并,只需在复制分工作表时直接复制工作表的UsedRange
,参见代码注释):