Excel vba:将多个文件合并到一张表中

我有一个文件夹中的100多个文件。 每个文件有3个列表,但只有1个列表与数据。 我需要从每个文件中获取这些数据,并将其合并到一个列表中的单个文件中。 我为它写了一个子文件,但我不知道如何去select只需要的范围(它随文件而异) – 以同样的方式在键盘上Ctrl + Shift + left arrow + down arrow 。 而且我应该如何在粘贴之前粘贴到结果工作簿中的第一个空行呢?

 Sub combine() Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Visible = False ExcelApp.ScreenUpdating = False ExcelApp.DisplayAlerts = False ExcelApp.EnableEvents = False '**VARIABLES** Dim folderPath As String folderPath = "Y:\plan_graphs\final\mich_alco_test\files\" 'COUNT THE FILES Dim totalFiles As Long totalFiles = 0 Dim fileTitle As String fileTitle = Dir(folderPath & "*.xl??") Do While fileTitle <> "" totalFiles = totalFiles + 1 fileTitle = Dir() Loop 'OPENING FILES Dim resultWorkbook As Workbook Dim dataWorkbook As Workbook Set resultWorkbook = ExcelApp.Application.Workbooks.Open("Y:\plan_graphs\final\mich_alco_test\result.xlsx") fileTitle = Dir(folderPath & "*.xl??") 'FOR EACH FILE Do While fileTitle <> "" Set dataWorkbook = ExcelApp.Application.Workbooks.Open(folderPath & fileTitle) dataWorkbook.Worksheets("List1").Range("A1").Select dataWorkbook.Worksheets("List1").Selection.CurrentRegion.Select `resultWorkbook.Range fileTitle = Dir() Loop ExcelApp.Quit Set ExcelApp = Nothing End Sub 

我可能误解了这个问题,不幸的是我不能发表评论。 如果我把这个问题弄错了,我会删除。

但我不知道如何去select只需要的范围

这表明你有一个dynamic的数据量,并希望使用Range来获取select。

假设您知道数据所在的列位置(在这种情况下,我的列表从B2开始,我们知道它在哪里结束,您可以使用Range来dynamicselect所有数据:

 Dim rcell As Range Dim rng As Range Set rng = ActiveSheet.Range("B2", Range("B2").End(xlDown)) For Each rcell In rng.Cells Debug.Print rcell.Value Next rcell End Sub 

首先我们定义一个Rangevariables,并将其赋值给从B2开始的范围,然后使用.End(xlDown)我们可以select在最后一个条目处结束的范围。

进一步阅读.End()请看这里。

希望这可以帮助。

你可以做到这一点没有VBA。 改用Get&Transform。
这里有几个步骤,让你开始:

  1. 转到数据选项卡
  2. 在Get&Transform下,selectNew Query – From File – From Folder
  3. select包含所有100多个文件的文件夹
  4. select包含您的数据的选项卡
  5. 你几乎在那里。 做最后的修复(如果需要的话)
  6. 完成后,请点击closures并加载