我需要能够从 6 个格式相同的单独 Excel 工作簿中提取数据,所有 6 个工作簿的第一行都是相同的标题,然后从第 2 行开始向下的数据在所有 6 个工作簿中的格式都是相同的。
我们基本上在工作中将其用于小型邮件发送,因此员工将带有姓名的地址粘贴在“发布”Excel 工作簿中,并且始终在第一张工作表上,始终从第二行开始。
我有一本主“发布”工作簿,目前我必须手动进入其他人的工作簿并剪下他们的标签并将它们放在主工作簿中然后打印。
我如何自动剪切帖子标签(基本上是从左到右写入几列的数据)并将其粘贴到主 Excel 表中?(需要从 6 个工作簿中删除数据)。
我尝试了所有能找到的帮助信息并进行了大量搜索,但就是无法解决这个问题。
我不想将标题发布到主文件中,主文件已经有相同的标题可供排序。
谢谢。(Office 2007 或 2013 说明就可以了。)
答案1
取决于规则的严格程度/同事的能力,解决方案有所不同:
- 共享工作簿:每个人都了解所有内容并信任数据。
- 分割数据库:每个人都有一份输入表,大家都使用同一个数据集;他们不被信任,但都有足够的能力轻松地使用它
- 单独的数据库:宏运行从所有散居数据集到主表的附加查询,然后运行删除查询主表
- Excel 文件打开下级文件(循环打开),复制数据,然后删除,最后保存关闭。
你有多少空闲时间?
答案2
打开一个新工作簿,按 ALT+F11。
添加新模块,并粘贴以下 vba 代码:
Sub mergexlfiles()
Dim actwb As Workbook
Dim LastRow As Long
Dim DestRow As Long
Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object
Application.ScreenUpdating = False
Set mergeObj = CreateObject("Scripting.FileSystemObject")
Set dirObj = mergeObj.Getfolder("C:\folder\") 'update folder path
Set filesObj = dirObj.Files
For Each everyObj In filesObj
Set actwb = Workbooks.Open(everyObj)
LastRow = actwb.Worksheets(1).Cells.Find(What:="*", _
After:=actwb.Worksheets(1).Cells.Range("A1"), _
SearchDirection:=xlPrevious, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows).Row
Range("A2:S" & LastRow).Copy 'amend "S" to last column letter in source files
ThisWorkbook.Worksheets(1).Activate
Range("A" & ThisWorkbook.Worksheets(1).UsedRange.Rows.Count).Offset(1, 0).Value = actwb.Name
Range("B" & ThisWorkbook.Worksheets(1).UsedRange.Rows.Count).Offset(1, 0).PasteSpecial
Application.CutCopyMode = False
actwb.Close
Next
End Sub
确保更新注释部分,并运行宏。
该脚本将依次打开您指定的文件夹内的每个文件,并将内容粘贴到新的工作簿中。
当屏幕更新时,您将拥有一张包含所有内容的 Excel 表。
希望有所帮助。
(我改编了一些在其他地方找到的 vba,抱歉,我不确定原始来源。)
答案3
您可以使用 Excel 中的数据连接将任意数量的其他工作簿中的数据导入到主工作簿中。我很久以前就这样做过,效果很好。此 MS Office 网页解释了如何设置它。您甚至可以将主工作簿中的数据放在不同的单元格范围内,以跟踪谁的邮件正在发出。
还没有弄清楚如何清除已经导入的单个工作簿的数据,但这可能是一个好的开始。