【发布时间】:2019-12-03 19:38:47
【问题描述】:
我需要将多个电子表格合并到一个工作簿中,还要合并到一个合并的电子表格中。每个文件有 1000 多行,三个目录大约有 40-50 个这样的文件。这些可以单独组合,因为它们代表三年的人事记录。
我有一个 VBA 宏,可以成功地将工作表放入一个工作簿中。我还有一个宏,用于将这些工作表组合到一个附加的电子表格中。但是,我需要在组合文件的第一行之后取出每个连续文件数据添加的标题行。
此外,我需要使用宏在每个文件中创建一列,每行填充文件名(这样,一旦与其他文件合并,就可以清楚每个数据点来自哪个源)或找到一个在组合工作表时执行此操作的宏。如果是前者使用对每个文件执行此操作的宏,在我使用单个电子表格组合宏之前,那么我需要的只是更新我的最终宏,它只为第一行放置一个标题行。以下是数据示例:
我需要最终文件在 A 中的列(新创建的列)中包含该行所来自的每个文件源的文件名。请参阅下面的示例,了解我希望组合结果的样子:
这是我用于将多个选项卡/电子表格组合到一个电子表格中的宏:
Sub Merge_Sheets()
'Insert a new worksheet
Sheets.Add
'Rename the new worksheet
ActiveSheet.Name = "YearlyCompilation"
'Loop through worksheets and copy the to your new worksheet
For Each ws In Worksheets
ws.Activate
'Don't copy the merged sheet again
If ws.Name <> "YearlyCompilation" Then
ws.UsedRange.Select
Selection.Copy
Sheets("YearlyCompilation").Activate
'Select the last filled cell
ActiveSheet.Range("A1048576").Select
Selection.End(xlUp).Select
'For the first worksheet you don't need to go down one cell
If ActiveCell.Address <> "$A$1" Then
ActiveCell.Offset(1, 0).Select
End If
'Instead of just paste, you can also paste as link, as values etc.
ActiveSheet.Paste
End If
Next
End Sub
【问题讨论】:
-
由于您似乎首先将所有工作表移动到一个工作簿中,您打算如何存储文件名?使用工作表名称是一种选择吗?
-
是的,我的第一个宏具有代码,当导入单独的电子表格时,它会将它们导入的选项卡/工作表命名为原始文件的名称。如果您建议有一个宏可以将这些文件合并到一个工作表中,而无需先创建一个组合工作簿,请告诉我。对于 wbkSrcBook.Sheets 中的每个 wksCurSheet countSheets = countSheets + 1 wksCurSheet.Copy After:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count) wbkCurBook.Sheets(wbkCurBook.Sheets.Count).Name = Left(wksCurSheet.Name & wbkSrcBook.Name , 31)
-
这不太容易,我正在快速写一些东西,可以有效地解决您提出的问题。
标签: excel vba spreadsheet